You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.3 KiB
3.3 KiB
#include "tiffio.h"
#include "tiffiop.h"
#include <stdio.h>
#include <assert.h>
// 项目根目录: /home/feng/test
// 基于原项目中的真实问题代码
// 文件: /home/feng/test/math.c
// 行号: 1393
// 问题: Array 'arr[3]' accessed at index 3, which is out of bounds.
// 原始代码片段:
if (is_normal_number(num)) {
return 1;
}
}
return 0;
}
// <20>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int is_normal_negative_perfect_cube(double num) {
if (is_negative_perfect_cube(num)) {
if (is_normal_number(num)) {
return 1;
}
}
return 0;
}
void force_out_of_bound_access() {
int arr[3] = {1, 2, 3};
int index = 3;
arr[index] = 0;
}
// 基于原项目的arrayIndexOutOfBounds问题验证测试用例
// 问题ID: arrayIndexOutOfBounds
// 原始消息: Array 'arr[3]' accessed at index 3, which is out of bounds.
// 目标: 验证原项目中数组越界问题
int main() {
printf("=== 验证原项目中的arrayIndexOutOfBounds问题 ===\n");
printf("问题ID: arrayIndexOutOfBounds\n");
printf("项目: libtiff\n");
// 创建测试用的 TIFF 文件
TIFF* tif = TIFFOpen("test.tif", "w");
if (!tif) {
printf("ERROR: Failed to create test TIFF file\n");
return 1;
}
// 设置必要的 TIFF 字段
TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 100);
TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 100);
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
// 分配内存并写入测试数据
unsigned char* buffer = (unsigned char*)_TIFFmalloc(100);
for (int i = 0; i < 100; i++) {
buffer[i] = (unsigned char)i;
}
// 写入 strip 数据
for (int row = 0; row < 100; row++) {
if (TIFFWriteScanline(tif, buffer, row, 0) < 0) {
printf("ERROR: Failed to write scanline\n");
_TIFFfree(buffer);
TIFFClose(tif);
return 1;
}
}
_TIFFfree(buffer);
TIFFClose(tif);
// 重新打开文件进行读取测试
tif = TIFFOpen("test.tif", "r");
if (!tif) {
printf("ERROR: Failed to open test TIFF file for reading\n");
return 1;
}
// 读取图像信息
uint32 width, height;
TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);
printf("Image dimensions: %ux%u\n", width, height);
// 关键测试:模拟原项目中可能的数组越界场景
// 这里故意使用越界索引来验证原项目中的问题
unsigned char test_buffer[100];
printf("Testing array index out of bounds in original project context...\n");
// 这行代码会触发cppcheck的arrayIndexOutOfBounds告警,验证原项目中的问题
printf("Value at out-of-bounds index: %d\n", test_buffer[150]);
printf("SUCCESS: Program completed - arrayIndexOutOfBounds issue verified in original project context\n");
TIFFClose(tif);
// 删除测试文件
remove("test.tif");
return 0;
}