Re: [HACKERS] Try to fix endless loop in ecpg with informix mode
От | 高增琦 |
---|---|
Тема | Re: [HACKERS] Try to fix endless loop in ecpg with informix mode |
Дата | |
Msg-id | CAFmBtr14uyN8empQXt0FvSgjD1QgqKazuSD=HJPYbyQrHfcC6Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] Try to fix endless loop in ecpg with informix mode (高增琦 <pgf00a@gmail.com>) |
Список | pgsql-hackers |
Diff from the head:
(use the following if to decide true or false)
```
diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c
index 5375934..1621e7b 100644
--- a/src/interfaces/ecpg/ecpglib/data.c
+++ b/src/interfaces/ecpg/ecpglib/data.c
@@ -57,8 +57,7 @@ garbage_left(enum ARRAY_TYPE isarray, char **scan_length, enum COMPAT_MODE compa
/* skip invalid characters */
do {
(*scan_length)++;
- } while (**scan_length != ' ' && **scan_length != '\0' && isdigit(**scan_length));
- return false;
+ } while (isdigit(**scan_length));
}
if (**scan_length != ' ' && **scan_length != '\0')
```
(use the following if to decide true or false)
```
diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c
index 5375934..1621e7b 100644
--- a/src/interfaces/ecpg/ecpglib/data.c
+++ b/src/interfaces/ecpg/ecpglib/data.c
@@ -57,8 +57,7 @@ garbage_left(enum ARRAY_TYPE isarray, char **scan_length, enum COMPAT_MODE compa
/* skip invalid characters */
do {
(*scan_length)++;
- } while (**scan_length != ' ' && **scan_length != '\0' && isdigit(**scan_length));
- return false;
+ } while (isdigit(**scan_length));
}
if (**scan_length != ' ' && **scan_length != '\0')
```
2017-11-02 11:07 GMT+08:00 高增琦 <pgf00a@gmail.com>:
How about changes as below? (use following the if to decide true or false)with "invalid input syntax for type int" for "a".Thanks for commit.I am afraid the changes may separate "7.a" to "7" and "a", then error out
```
- } while (**scan_length != ' ' && **scan_length != '\0');
- return false;
+ } while (isdigit(**scan_length));
```--2017-11-01 20:35 GMT+08:00 Michael Meskes <meskes@postgresql.org>:> Any comments?
Sorry, I've been working through the backlog of three weeks of
traveling.
> > I tried some tests with ecpg informix mode.
> > When trying to store float data into a integer var, I got endless
> > loop.
> >
> > The reason is:
> > In informix mode, ecpg can accept
> > string form of float number when processing query result.
> > During checking the string form of float number, it seems
> > that ecpg forgot to skip characters after '.'.
> > Then outer loop will never stop because it hopes to see '\0'.
> >
> > The first patch will reproduce the problem in ecpg's regress test.
> > The second patch tries to fix it in simple way.
Thanks for spotting and fixing. I changed your patch slightly and made
it check if the rest of the data is indeed digits, or else it would
accept something like "7.hello" as "7".
Committed.
Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Meskes at (Debian|Postgresql) dot Org
Jabber: michael at xmpp dot meskes dot org
VfL Borussia! Força Barça! SF 49ers! Use Debian GNU/Linux, PostgreSQL
--
В списке pgsql-hackers по дате отправления: