diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-02-26 20:58:22 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2011-03-02 20:07:12 (GMT) |
| commit | 647ff2bff073d525f1c02eea5c4e01e8dcd3f279 (patch) | |
| tree | 5d9df2e9125f1688cd3eced6f7190492ed603bbd /src/interface.c | |
| parent | e055eb5893fc6f5eb064d2d42a83bf13d02e1267 (diff) | |
| download | powder-647ff2bff073d525f1c02eea5c4e01e8dcd3f279.zip powder-647ff2bff073d525f1c02eea5c4e01e8dcd3f279.tar.gz | |
Fix some potential crashes, better handling of empty server responses
Diffstat (limited to 'src/interface.c')
| -rw-r--r-- | src/interface.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/interface.c b/src/interface.c index 9b1b495..b13917d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -2549,7 +2549,8 @@ int search_ui(pixel *vid_buf) memset(v_buf, 0, ((YRES+MENUSIZE)*(XRES+BARSIZE))*PIXELSIZE); } is_p1 = (exp_res < GRID_X*GRID_Y); - free(results); + if (results) + free(results); active = 0; } @@ -2824,6 +2825,10 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) data = http_async_req_stop(http, &status, &data_size); if (status == 200) { + if (!data||!data_size) { + error_ui(vid_buf, 0, "Save data is empty (may be corrupt)"); + break; + } pixel *full_save = prerender_save(data, data_size, &imgw, &imgh); if (full_save!=NULL) { save_pic = rescale_img(full_save, imgw, imgh, &thumb_w, &thumb_h, 2); @@ -2842,15 +2847,16 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) { http_last_use_2 = time(NULL); info_data = http_async_req_stop(http_2, &status_2, NULL); - if (status_2 == 200) + if (status_2 == 200 || !info_data) { info_ready = info_parse(info_data, info); - if (info_ready==-1) { - error_ui(vid_buf, 0, "Not found"); + if (info_ready<=0) { + error_ui(vid_buf, 0, "Save info not found"); break; } } - free(info_data); + if (info_data) + free(info_data); active_2 = 0; free(http_2); http_2 = NULL; @@ -3546,7 +3552,7 @@ int execute_tagop(pixel *vid_buf, char *op, char *tag) return 1; } - if (result[2]) + if (result && result[2]) { strncpy(svf_tags, result+3, 255); svf_id[15] = 0; @@ -3604,14 +3610,16 @@ void execute_save(pixel *vid_buf) free(result); return; } - if (result && strncmp(result, "OK", 2)) + if (!result || strncmp(result, "OK", 2)) { + if (!result) + result = mystrdup("Could not save - no reply from server"); error_ui(vid_buf, 0, result); free(result); return; } - if (result[2]) + if (result && result[2]) { strncpy(svf_id, result+3, 15); svf_id[15] = 0; |
