Re: reading uninitialized buffer - Mailing list pgsql-patches
From | Andrew Dunstan |
---|---|
Subject | Re: reading uninitialized buffer |
Date | |
Msg-id | 401D0B2C.5010208@dunslane.net Whole thread Raw |
In response to | Re: reading uninitialized buffer (Andrew Dunstan <andrew@dunslane.net>) |
Responses |
Re: reading uninitialized buffer
Re: reading uninitialized buffer |
List | pgsql-patches |
... and here it is. As for the test being outside the "if" statement, it is true that that might waste a few cycles, but it hardly matters. Personally, I would prefer to replace the if statement with this: if (c == EOF || c == '\n') { *buf = '\0'; return; } and then it wouldn't be an issue at all, but I know some people don't like early function returns - is there a general postgres style rule about it? cheers andrew I wrote: > > This time it is my fault, rather than freebsd's ;-) > > I think I can do something slightly cleaner than this, though, by > hoisting the buf termination above the test. We could also replace the > strncmp calls with strcmp calls if the buffer has its nul. I will post > something soon. > > cheers > > andrew > > > Dennis Bjorklund wrote: > >> I've been testing pg using valgrind and have found a read of an >> uninitialized buffer. In the hba-tokenizer when we have not read any >> characters (or too few) we still perform a couple of: >> >> strncmp(start_buf,"sameuser",8) >> >> Since this is done on random data it might return true although we have >> not read anything. The result is that we can (even if the probability is >> low) return the wrong thing. >> >> The solution is simply to terminate the buffer with '\0' before the >> strncmp(). >> >> I also moved our test inside the previous if, outside of that block our >> test can never be true anyway. I don't know why it was outside in the >> first place. >> >> >> > Index: src/backend/libpq/hba.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/libpq/hba.c,v retrieving revision 1.119 diff -c -w -r1.119 hba.c *** src/backend/libpq/hba.c 25 Dec 2003 03:44:04 -0000 1.119 --- src/backend/libpq/hba.c 1 Feb 2004 13:53:51 -0000 *************** *** 169,187 **** } if ( !saw_quote && ( ! strncmp(start_buf,"all",3) == 0 || ! strncmp(start_buf,"sameuser",8) == 0 || ! strncmp(start_buf,"samegroup",9) == 0 ) ) { /* append newline to a magical keyword */ *buf++ = '\n'; } - *buf = '\0'; } --- 169,189 ---- } + *buf = '\0'; + if ( !saw_quote && ( ! strcmp(start_buf,"all") == 0 || ! strcmp(start_buf,"sameuser") == 0 || ! strcmp(start_buf,"samegroup") == 0 ) ) { /* append newline to a magical keyword */ *buf++ = '\n'; + *buf = '\0'; } }
pgsql-patches by date: