以下の例を試して、符号付きと符号なしの数値が混在することによる C のセキュリティの問題を調べました。
以下のコードでは、長さが負の値であるため、ここでどのように破損が発生するのか理解できませんでした。
read() は、ファイルの loc -1 を読み取ろうとします。このため、オーバーフローがありますか?
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
int fd;
int get_length(){
fd = open("hello.txt",O_RDWR);
return -1;
}
int read_data(){
int length,n;
char buffer[1024];
printf("\n read_data() \n");
length = get_length();
if(length > 1024){
perror("\n Big file! \n");
return 0;
}
//printf("\n %d \n",length);
read(fd,buffer,length);
printf("\n %s \n",buffer);
return length;
}
int main(){
read_data();
}