From 8fcd2200d09da2948271190cf313387bb861de3e Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 8 Sep 2014 19:04:28 +1000 Subject: [PATCH] Fixes the calls to the member service paged queries to do a normal GetAll without parameters if the int.max value is used. Ensures that if too many id params are sent to GetAll an exception is raised --- .../Persistence/Repositories/MemberRepository.cs | 8 ++++++++ .../Persistence/Repositories/RepositoryBase.cs | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 88684f9165..6c404a9149 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -604,6 +604,14 @@ namespace Umbraco.Core.Persistence.Repositories Sql sql, int pageIndex, int pageSize, out int totalRecords, Func, int[]> resolveIds) { + //If a max size is passed in, just do a normal get all! + if (pageSize == int.MaxValue) + { + var result = GetAll().ToArray(); + totalRecords = result.Count(); + return result; + } + var pagedResult = Database.Page(pageIndex + 1, pageSize, sql); totalRecords = Convert.ToInt32(pagedResult.TotalItems); diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index 063891ded8..ccf946f9e2 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -133,6 +133,11 @@ namespace Umbraco.Core.Persistence.Repositories /// public IEnumerable GetAll(params TId[] ids) { + if (ids.Length > 2000) + { + throw new InvalidOperationException("Cannot perform a query with more than 2000 parameters"); + } + //ensure they are de-duplicated, easy win if people don't do this as this can cause many excess queries ids = ids.Distinct() //don't query by anything that is a default of T (like a zero)