svnno****@sourc*****
svnno****@sourc*****
2011年 4月 8日 (金) 17:48:46 JST
Revision: 558 http://sourceforge.jp/projects/swfed/svn/view?view=rev&revision=558 Author: yoya Date: 2011-04-08 17:48:46 +0900 (Fri, 08 Apr 2011) Log Message: ----------- getShapeData のメモリリークを解消 (0.38 でのデグレード) Modified Paths: -------------- trunk/src/bitmap_util.c trunk/src/php_swfed.c -------------- next part -------------- Modified: trunk/src/bitmap_util.c =================================================================== --- trunk/src/bitmap_util.c 2011-04-08 07:54:32 UTC (rev 557) +++ trunk/src/bitmap_util.c 2011-04-08 08:48:46 UTC (rev 558) @@ -41,7 +41,7 @@ break; case 0xDA: // SOS return 1; // not found - default: + default: if (isJPEG_SOFXX(marker2)) { *width = 0x100 * data[idx + 7] + data[idx + 8]; *height = 0x100 * data[idx + 5] + data[idx + 6]; Modified: trunk/src/php_swfed.c =================================================================== --- trunk/src/php_swfed.c 2011-04-08 07:54:32 UTC (rev 557) +++ trunk/src/php_swfed.c 2011-04-08 08:48:46 UTC (rev 558) @@ -766,18 +766,21 @@ PHP_METHOD(swfed, getShapeData) { long cid = 0; swf_object_t *swf = NULL; - unsigned char *data_ref = NULL; + unsigned char *data = NULL, *new_buff; unsigned long data_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &cid) == FAILURE) { RETURN_FALSE; } swf = get_swf_object(getThis() TSRMLS_CC); - data_ref = swf_object_get_shapedata(swf, cid, &data_len); - if (data_ref == NULL) { + data = swf_object_get_shapedata(swf, cid, &data_len); + if (data == NULL) { fprintf(stderr, "getShapeData: Can't swf_object_get_shapedata (cid=%d)\n", cid); RETURN_FALSE; } - RETURN_STRINGL(data_ref, data_len, 1); + new_buff = emalloc(data_len); + memcpy(new_buff, data, data_len); + free(data); + RETURN_STRINGL(new_buff, data_len, 0); } PHP_METHOD(swfed, replaceShapeData) {