Forum OpenACS Q&A: Re: Re: Re: Re: Openacs process disappearing

Collapse
Posted by Jason Cheung on
It seems that the integer validation of cid is not working .. is there anything wrong with this snippet of code?

ad_page_contract {

A gateway, base one Category_id, redirect user to specific page

} {
cid:integer,notnull
{lang ""}
}

Collapse
Posted by Gustaf Neumann on
Jason, what version of openacs are you using? what version of tcl?

try the following in the shell:
set var x
set val 123
ad_page_contract_filter_proc_integer var val

(this is a valid test and returns 1) and then

set var x
set val [ns_urldecode 1017%3C/p%3E%0D%0A%3Cp%3E]
ad_page_contract_filter_proc_integer var val

(this is the test with the invalid id from your example)
If the integer test is the problem, the second one crashes.
the second call should return 0.

for me, this works nicely...

Collapse
Posted by Jason Cheung on
Hi Gustaf,

Thank you for your reply,

openacs 5.1.2d
tcl: version 8.4

The two tests did not return any error - and to update on further investigation, another website (lets say website B) using the same tcl version and openacs version did not have the same problem with entering a string in the query. I.E. it would complain:

We had a problem with your input:

group_id is not an integer

Please back up using your browser, correct the above , and resubmit your entry.

Thank you.

Whereas in website A (if I enter category?cid=a),it returns 500 Internal Server Error. Tested string and email also; they work fine.

Not sure if it relates to the openacs core installation or the custom tcl code or aolserver configuration.

Jason, do the tests return on both systems the correct boolean value? To be sure, try to use the function ad_page_contract_filter integer from version 1.20 http://eye.openacs.org/viewrep/OpenACS/packages/acs-tcl/tcl/tcl-documentation-procs.tcl

don't you see any error message in the error log from the 500 error?

Gustaf,

After some more testing it seems I know where the problem lies. It seems the master template (blank-master.adp) contained

ad_page_contract {

} {

{item_id:integer 0}
{cid:integer 0}
{return_url ""}

}
which it did not agree with .. guess it did do the validation after all and it was the display template which had the 500 problem!

Jason

I have 2 files - test.tcl and blank-master.tcl

test.tcl

ad_page_contract {

} {
x:notnull,integer
}

ns_log Notice INSIDETEST
ad_return_template

blank-master.tcl

ad_page_contract {

} {
{x ""}
}

ns_log Notice BLANKMASTER

How might I pass value of x into blank-master in usual circumstances such as test?x=1 and test?x=a (this works;returns error) and also catch invalid urls such as test?x=1017%3C/p%3E%0D%0A%3Cp%3E (this causes server error).

A quick solution is to pass as a property in default-master and do integer validation further down in blank-master.

However, is there a coding convention that I am missing for passing queries to blank-master with better exception handling ?

The problem that I have had was rp processor displaying the error message within the master template which caught the same validation error thus resulting in a neverending error loop.