diff options
Diffstat (limited to 'src/lib/libcrypto/bio/bss_mem.c')
| -rw-r--r-- | src/lib/libcrypto/bio/bss_mem.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/lib/libcrypto/bio/bss_mem.c b/src/lib/libcrypto/bio/bss_mem.c index a4edb711ae..e7ab9cb3a3 100644 --- a/src/lib/libcrypto/bio/bss_mem.c +++ b/src/lib/libcrypto/bio/bss_mem.c | |||
| @@ -284,6 +284,7 @@ static int mem_gets(BIO *bp, char *buf, int size) | |||
| 284 | 284 | ||
| 285 | BIO_clear_retry_flags(bp); | 285 | BIO_clear_retry_flags(bp); |
| 286 | j=bm->length; | 286 | j=bm->length; |
| 287 | if ((size-1) < j) j=size-1; | ||
| 287 | if (j <= 0) | 288 | if (j <= 0) |
| 288 | { | 289 | { |
| 289 | *buf='\0'; | 290 | *buf='\0'; |
| @@ -292,17 +293,18 @@ static int mem_gets(BIO *bp, char *buf, int size) | |||
| 292 | p=bm->data; | 293 | p=bm->data; |
| 293 | for (i=0; i<j; i++) | 294 | for (i=0; i<j; i++) |
| 294 | { | 295 | { |
| 295 | if (p[i] == '\n') break; | 296 | if (p[i] == '\n') |
| 296 | } | 297 | { |
| 297 | if (i == j) | 298 | i++; |
| 298 | { | 299 | break; |
| 299 | BIO_set_retry_read(bp); | 300 | } |
| 300 | /* return(-1); change the semantics 0.6.6a */ | ||
| 301 | } | 301 | } |
| 302 | else | 302 | |
| 303 | i++; | 303 | /* |
| 304 | /* i is the max to copy */ | 304 | * i is now the max num of bytes to copy, either j or up to |
| 305 | if ((size-1) < i) i=size-1; | 305 | * and including the first newline |
| 306 | */ | ||
| 307 | |||
| 306 | i=mem_read(bp,buf,i); | 308 | i=mem_read(bp,buf,i); |
| 307 | if (i > 0) buf[i]='\0'; | 309 | if (i > 0) buf[i]='\0'; |
| 308 | ret=i; | 310 | ret=i; |
