[DBD::Pg] Better logic inside of pg_st_split_statement for the end of the string. Per talk on RT 79035. In a nutshell, we cannot look at *statement, which is one past the current character (ch), if we know what we have already reached the end of the string because ch == '\0'. This was (quite understanably!) causing segfaults on some platforms. Another set of eyes for reviewing welcome (hi Davids)
dbdpg-commits-gENoVmVU/[email protected] Mon, 20 Aug 2012 14:12:05 -0400
| Newsgroups | gmane.comp.db.postgresql.dbdpg.cvs |
|---|---|
| Message-ID | <[email protected]> |
Committed by Greg Sabino Mullane <greg-O9fzpki4YnJWk0Htik3J/[email protected]> Better logic inside of pg_st_split_statement for the end of the string. Per talk on RT 79035. In a nutshell, we cannot look at *statement, which is one past the current character (ch), if we know what we have already reached the end of the string because ch == '\0'. This was (quite understanably!) causing segfaults on some platforms. Another set of eyes for reviewing welcome (hi Davids) --- dbdimp.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dbdimp.c b/dbdimp.c index 84caa8e..ec84e46 100644 --- a/dbdimp.c +++ b/dbdimp.c @@ -1973,8 +1973,12 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char if (placeholder_type > 0) imp_sth->placeholder_type = placeholder_type; - /* If this segment also, ended the string, set ch so we bail out early */ - if ('\0' == *statement) + /* + Check if this segment also ends the string. + If it does, we simply leave right away. + Make sure we don't peek at statement if we know it is past the end of the string. + */ + if ('\0' != ch && '\0' == *statement) break; } /* end large while(1) loop: statement parsing */ -- 1.7.1