Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -r1.153.2.7 -r1.153.2.8 --- openacs-4/packages/xowiki/xowiki.info 23 Dec 2015 18:22:41 -0000 1.153.2.7 +++ openacs-4/packages/xowiki/xowiki.info 31 Dec 2015 17:01:44 -0000 1.153.2.8 @@ -10,7 +10,7 @@ t xowiki - + Gustaf Neumann A xotcl-based enterprise wiki system with multiple object types 2015-10-04 @@ -55,9 +55,10 @@ BSD-Style 2 - + + Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v diff -u -r1.200.2.7 -r1.200.2.8 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 30 Nov 2015 20:26:48 -0000 1.200.2.7 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 31 Dec 2015 17:01:44 -0000 1.200.2.8 @@ -194,9 +194,8 @@ set and_names [list] foreach cid_and [split $cid_or ,] { if {![string is integer -strict $cid_and]} { - return -code error "invalid category id '$cid_and'" - ns_log warning "ignore invalid category id '$cid_and'" - continue + ad_return_complaint 1 "invalid category id '$cid_and'" + ad_script_abort } lappend and_names [::category::get_name $cid_and] lappend ands "exists (select 1 from category_object_map \ @@ -801,7 +800,12 @@ if {$category_ids ne ""} { foreach cid [split $category_ids ,] { set or_ids [split $cid |] - foreach or_id $or_ids { if {![string is integer $or_id]} {error "invalid category_ids"}} + foreach or_id $or_ids { + if {![string is integer $or_id]} { + ad_return_complaint 1 "invalid category_id" + ad_script_abort + } + } append sql " and exists (select * from category_object_map \ where object_id = ci.item_id and category_id in ([join $or_ids ,]))" } Index: openacs-4/packages/xowiki/tcl/package-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v diff -u -r1.291.2.10 -r1.291.2.11 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 23 Dec 2015 18:21:56 -0000 1.291.2.10 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 31 Dec 2015 17:01:44 -0000 1.291.2.11 @@ -848,11 +848,19 @@ if {$err} {set errorCode $::errorCode} if {$batch_mode} {[my id] unset -nocomplain __batch_mode} if {$err} { - lassign $errorCode flag type value - if {$flag eq "AD" && $type eq "EXCEPTION" && $value eq "ad_script_abort"} { + # + # Check, if we were called from "ad_script_abort" (intentional abortion) + # + if {[ad_exception $errorCode] eq "ad_script_abort"} { + # + # Yes, this was an intentional abortion + # return "" } else { - ns_log error "error during invocation of method $method errorMsg: $errorMsg, $::errorInfo" + # + # No, it was a real error + # + ad_log error "error during invocation of method $method errorMsg: $errorMsg, $::errorInfo" return [my error_msg -status_code 500 \ -template_file $error_template \ "error during [ns_quotehtml $method]:
[ns_quotehtml $errorMsg]
"] @@ -891,7 +899,10 @@ Package instproc get_page_from_item_or_revision_id {item_id} { set revision_id [my query_parameter revision_id 0] - if {![string is integer -strict $revision_id]} { return [my error_msg "No valid revision_id provided!"] } + if {![string is integer -strict $revision_id]} { + ad_return_complaint 1 "invalid revision_id" + ad_script_abort + } set [expr {$revision_id ? "item_id" : "revision_id"}] 0 #my log "--instantiate item_id $item_id revision_id $revision_id" return [::xo::db::CrClass get_instance_from_db -item_id $item_id -revision_id $revision_id] @@ -2107,7 +2118,10 @@ set autoname [my get_parameter autoname 0] set parent_id [$id query_parameter parent_id ""] if {$parent_id eq ""} {set parent_id [$id form_parameter folder_id $folder_id]} - if {![string is integer -strict $parent_id]} {error "parent_id must be integer"} + if {![string is integer -strict $parent_id]} { + ad_return_complaint 1 "invalid parent_id" + ad_script_abort + } set page [$object_type new -volatile -parent_id $parent_id -package_id $id] #my ds "parent_id of $page = [$page parent_id], cl=[$page info class] parent_id=$parent_id\n[$page serialize]" if {$object_type eq "::xowiki::PageInstance"} { @@ -2123,7 +2137,10 @@ set source_item_id [$id query_parameter source_item_id ""] if {$source_item_id ne ""} { - if {![string is integer -strict $source_item_id]} {error "source_item_id must be integer"} + if {![string is integer -strict $source_item_id]} { + ad_return_complaint 1 "invalid source_item_id" + ad_script_abort + } set source [$object_type get_instance_from_db -item_id $source_item_id] $page copy_content_vars -from_object $source set name "[::xowiki::autoname new -parent_id $source_item_id -name [$source name]]" @@ -2143,12 +2160,18 @@ Package instproc www-manage-categories {} { set object_id [my query_parameter object_id] - if {![string is integer -strict $object_id]} { return [my error_msg "No valid object_id provided!"] } + if {![string is integer -strict $object_id]} { + ad_return_complaint 1 "invalid object_id" + ad_script_abort + } # flush could be made more precise in the future my flush_page_fragment_cache -scope agg - my returnredirect [site_node::get_package_url -package_key categories]cadmin/object-map?ctx_id=$object_id&object_id=$object_id + set href [export_vars -base [site_node::get_package_url -package_key categories]cadmin/object-map { + {ctx_id $object_id} {object_id} + }] + my returnredirect $href } # @@ -2157,9 +2180,15 @@ Package instproc www-edit-category-tree {} { set object_id [my query_parameter object_id] - if {![string is integer -strict $object_id]} { return [my error_msg "No valid object_id provided!"] } + if {![string is integer -strict $object_id]} { + ad_return_complaint 1 "invalid object_id" + ad_script_abort + } set tree_id [my query_parameter tree_id] - if {![string is integer -strict $tree_id]} { return [my error_msg "No valid tree_id provided!"] } + if {![string is integer -strict $tree_id]} { + ad_return_complaint 1 "invalid tree_id" + ad_script_abort + } # flush could be made more precise in the future my flush_page_fragment_cache -scope agg @@ -2209,7 +2238,7 @@ Package instproc www-delete {-item_id -name -parent_id} { # - # This delete method does not require an instanantiated object, + # This delete method does not require an instantiated object, # while the class-specific delete methods in xowiki-procs need these. # If a (broken) object can't be instantiated, it cannot be deleted. # Therefore we need this package level delete method. @@ -2224,7 +2253,10 @@ # if {![info exists item_id]} { set item_id [my query_parameter item_id] - if {![string is integer $item_id]} { return [my error_msg "No valid item_id provided!"] } + if {![string is integer $item_id]} { + ad_return_complaint 1 "invalid item_id" + ad_script_abort + } #my log "--D item_id from query parameter $item_id" } # Index: openacs-4/packages/xowiki/tcl/xowiki-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-procs.tcl,v diff -u -r1.485.2.20 -r1.485.2.21 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 23 Dec 2015 18:21:56 -0000 1.485.2.20 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 31 Dec 2015 17:01:44 -0000 1.485.2.21 @@ -1866,10 +1866,15 @@ # "render" might be cached if {[catch {set html [$includelet render]} errorMsg]} { - ns_log error "$errorMsg\n$::errorInfo" - set page_name [$includelet name] - set ::errorInfo [::xowiki::Includelet html_encode $::errorInfo] - set html [my error_during_render [_ xowiki.error-includelet-error_during_render]] + if {[string match "*for parameter*" $errorMsg]} { + set html "" + ad_return_complaint 1 $errorMsg + } else { + ad_log error $errorMsg + set page_name [$includelet name] + set ::errorInfo [::xowiki::Includelet html_encode $::errorInfo] + set html [my error_during_render [_ xowiki.error-includelet-error_during_render]] + } } #my log "--include includelet returns $html" return $html @@ -1971,7 +1976,13 @@ lappend adp_args __including_page [self] set including_page_level [template::adp_level] if {[catch {set page [template::adp_include $adp_fn $adp_args]} errorMsg]} { - ns_log error "$errorMsg\n$::errorInfo" + if {[ad_exception $::errorCode] eq "ad_script_abort"} { + # + # If the exception was from an ad_script_abort, propagate it up + # + ad_script_abort + } + ad_log error "$errorMsg\n$::errorInfo" # in case of error, reset the adp_level to the previous value set ::template::parse_level $including_page_level incr ::xowiki_inclusion_depth -1