Commit edc121a5e9dfe22cf299a1458ecb386249d08431
1 parent
0050d757
Exists in
master
and in
3 other branches
Corrigindo segfault em windows
Showing
1 changed file
with
15 additions
and
4 deletions
Show diff stats
selection.c
... | ... | @@ -317,12 +317,13 @@ static char * get_text(H3270 *hSession,unsigned char all) |
317 | 317 | { |
318 | 318 | int row, col, baddr; |
319 | 319 | char *ret; |
320 | - size_t sz = 0; | |
320 | + size_t buflen = (hSession->rows * (hSession->cols+1))+1; | |
321 | + size_t sz = 0; | |
321 | 322 | |
322 | 323 | if(!lib3270_connected(hSession)) |
323 | 324 | return NULL; |
324 | 325 | |
325 | - ret = malloc(hSession->rows * (hSession->cols+1)); | |
326 | + ret = malloc(buflen); | |
326 | 327 | |
327 | 328 | baddr = 0; |
328 | 329 | for(row=0;row < hSession->rows;row++) |
... | ... | @@ -342,9 +343,19 @@ static char * get_text(H3270 *hSession,unsigned char all) |
342 | 343 | if(cr) |
343 | 344 | ret[sz++] = '\n'; |
344 | 345 | } |
345 | - ret[sz] = 0; | |
346 | 346 | |
347 | - return realloc(ret,sz+1); | |
347 | + if(!sz) | |
348 | + { | |
349 | + free(ret); | |
350 | + return NULL; | |
351 | + } | |
352 | + | |
353 | + ret[sz++] = 0; | |
354 | + | |
355 | + if(sz != buflen) | |
356 | + ret = realloc(ret,sz); | |
357 | + | |
358 | + return ret; | |
348 | 359 | } |
349 | 360 | |
350 | 361 | LIB3270_EXPORT char * lib3270_get_text(H3270 *hSession) | ... | ... |