From 6990f52b0df48a4f2e2bde70513c11c92c33f628 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 5 Apr 2010 10:47:01 -0700 Subject: [PATCH] Fix bug #11510, allowing non-valid sort fields in the form params to CS. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Collaboration.pm | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index dfe5353ef..cb98d9378 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -11,6 +11,7 @@ - fixed: Viewing a Gallery File with non-ASCII keywords crashes - fixed #11509: System trash not sticky - fixed #11506: Cruft on i18n dirs in the released .tar.gz + - fixed #11510: Scratch variables for sort direction and key can break the CS 7.9.1 - fixed #11464: blank page after setting posts per page in Collaboration System to 0 (zero) diff --git a/lib/WebGUI/Asset/Wobject/Collaboration.pm b/lib/WebGUI/Asset/Wobject/Collaboration.pm index 3dbb64f45..be9f57f90 100644 --- a/lib/WebGUI/Asset/Wobject/Collaboration.pm +++ b/lib/WebGUI/Asset/Wobject/Collaboration.pm @@ -1159,16 +1159,28 @@ Collaboration System =cut sub getThreadsPaginator { - my $self = shift; + my $self = shift; + my $session = $self->session; my $scratchSortBy = $self->getId."_sortBy"; my $scratchSortOrder = $self->getId."_sortDir"; my $sortBy = $self->session->form->process("sortBy") || $self->session->scratch->get($scratchSortBy) || $self->get("sortBy"); + $sortBy =~ s/^\w+\.//; + # Sort by the thread rating instead of the post rating. other places don't care about threads. + $sortBy = $sortBy eq 'rating' ? 'threadRating' : $sortBy; + if (! WebGUI::Utility::isIn($sortBy, qw/userDefined1 userDefined2 userDefined3 userDefined4 userDefined5 title lineage revisionDate creationDate karmaRank threadRating/)) { + $sortBy = 'revisionDate'; + } + if ($sortBy eq 'assetId' || $sortBy eq 'revisionDate') { + $sortBy = 'assetData.' . $sortBy; + } my $sortOrder = $self->session->form->process("sortOrder") || $self->session->scratch->get($scratchSortOrder) || $self->get("sortOrder"); + #$sortOrder = lc $sortOrder; + #$sortOrder = 'desc' if ($sortOrder ne 'asc' && $sortOrder ne 'desc'); if ($sortBy ne $self->session->scratch->get($scratchSortBy) && $self->session->form->process("func") ne "editSave") { $self->session->scratch->set($scratchSortBy,$self->session->form->process("sortBy")); $self->session->scratch->set($scratchSortOrder, $sortOrder); @@ -1182,13 +1194,8 @@ sub getThreadsPaginator { } $self->session->scratch->set($scratchSortOrder, $sortOrder); } - $sortBy ||= "assetData.revisionDate"; - $sortOrder ||= "desc"; - # Sort by the thread rating instead of the post rating. other places don't care about threads. - if ($sortBy eq 'rating') { - $sortBy = 'threadRating'; - } $sortBy = join('.', map { $self->session->db->dbh->quote_identifier($_) } split(/\./, $sortBy)); + $sortOrder ||= 'desc'; my $sql = " select