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,12 +317,13 @@ static char * get_text(H3270 *hSession,unsigned char all) | ||
317 | { | 317 | { |
318 | int row, col, baddr; | 318 | int row, col, baddr; |
319 | char *ret; | 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 | if(!lib3270_connected(hSession)) | 323 | if(!lib3270_connected(hSession)) |
323 | return NULL; | 324 | return NULL; |
324 | 325 | ||
325 | - ret = malloc(hSession->rows * (hSession->cols+1)); | 326 | + ret = malloc(buflen); |
326 | 327 | ||
327 | baddr = 0; | 328 | baddr = 0; |
328 | for(row=0;row < hSession->rows;row++) | 329 | for(row=0;row < hSession->rows;row++) |
@@ -342,9 +343,19 @@ static char * get_text(H3270 *hSession,unsigned char all) | @@ -342,9 +343,19 @@ static char * get_text(H3270 *hSession,unsigned char all) | ||
342 | if(cr) | 343 | if(cr) |
343 | ret[sz++] = '\n'; | 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 | LIB3270_EXPORT char * lib3270_get_text(H3270 *hSession) | 361 | LIB3270_EXPORT char * lib3270_get_text(H3270 *hSession) |