Re: Bug in is_setting_search_path

"Inoue, Hiroshi" <[email protected]>
Newsgroups gmane.comp.db.postgresql.odbc
Message-ID <[email protected]>
Hi Grant,

Thanks for the report.
I would commit the fix.

regards,
Hiroshi Inoue

On 2018/01/11 9:17, Grant Shirreffs wrote:
>
> Hello,
>
> I have found a bug in the is_setting_search_path function 
> (connection.c line 1597).
>
> The search loop is currently:
>
> for(; *q; q++)
>
> {
>
> if(IS_NOT_SPACE(*q))
>
> {
>
> if(strnicmp(q, "search_path", 11) == 0)
>
> returnTRUE;
>
> q++;
>
> while(IS_NOT_SPACE(*q))
>
> q++;
>
> }
>
> }
>
> The inner while(IS_NOT_SPACE(*q)) loop will terminate if a null is 
> reached.  The loop variable will then be further incremented by the 
> “for” loop, to point beyond the null terminator, and so the loop will 
> continue, until by chance two nulls are encountered.  If two nulls are 
> not found, then eventually the loop will reach the end of the memory 
> page, and cause an access violation.  Note that if the string 
> “search_path” exists in memory beyond the end of the statement, a 
> false positive results from this function.
>
> The fix is to remove the increment from the “for” loop, and move it 
> instead to the false path of the “if”:
>
> for(; *q;)
>
> {
>
> if(IS_NOT_SPACE(*q))
>
> {
>
> if(strnicmp(q, "search_path", 11) == 0)
>
> returnTRUE;
>
> q++;
>
> while(IS_NOT_SPACE(*q))
>
> q++;
>
> }
>
> else
>
> q++
>
> }
>
> This issue has been causing occasional access violations in our code 
> (when calling SET LC_TIME=’’). We are currently testing with a fixed 
> version, which is giving no other problems so far.
>
> Please advise me if there is some other way I should submit this 
> change for review and inclusion.
>
> Thankyou
>
> Grant Shirreffs
>
> Principal Developer
>
> StayinFront Inc
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.