From 0096f30d28bbe8ede33e52950f9ac31e28492614 Mon Sep 17 00:00:00 2001 From: Terence Denning <terrencedenning@gmail.com> Date: Thu, 18 Apr 2019 17:49:47 +1000 Subject: [PATCH] fixed memory bug on discarded page --- http-server.c | 99 +++++++++++++++++++++++++++++++++++++++++--------- server | Bin 18304 -> 18304 bytes 2 files changed, 81 insertions(+), 18 deletions(-) diff --git a/http-server.c b/http-server.c index 13af679..cf3a91f 100644 --- a/http-server.c +++ b/http-server.c @@ -55,7 +55,7 @@ static bool handle_http_request(int sockfd) // try to read the request char buff[2049]; int n = read(sockfd, buff, 2049); - printf("%s\n", buff); + if (n <= 0) { if (n < 0) @@ -136,29 +136,87 @@ static bool handle_http_request(int sockfd) } else if (method == POST) { - // locate the username, it is safe to do so in this sample code, but usually the result is expected to be - // copied to another buffer using strcpy or strncpy to ensure that it will not be overwritten. - char * username = strstr(buff, "user=") + 5; - int username_length = strlen(username); - // the length needs to include the ", " before the username - long added_length = username_length + 2; - - // Set sockfd to a user - if( user1 == -1 ){ + char *username; + int username_length; + long added_length; + long size; + + // Set User + if( (user1 == -1) && (sockfd != user2) ){ user1 = sockfd; - } else if( user2 == -1 ){ + } else if( (user2 == -1) && (sockfd != user1) ){ user2 = sockfd; } - - webpage = "html/2_start.html"; + webpage = "html/2_start.html"; // get the size of the file struct stat st; - stat(webpage, &st); - // increase file size to accommodate the username - long size = st.st_size + added_length; - n = sprintf(buff, HTTP_200_FORMAT, size); + if(strstr(buff, "quit=Quit") != NULL){ + stat(webpage, &st); + // Reset User + if(sockfd == user1){ + user1 = -1; + user1_start = 0; + } else if(sockfd == user2){ + user2 = -1; + user2_start = 0; + } else { + printf("Sockfd not set for some reason..\n\n"); + } + + n = sprintf(buff, HTTP_200_FORMAT, st.st_size); + if (write(sockfd, buff, n) < 0) + { + perror("write"); + return false; + } + webpage = "html/1_intro.html"; + int filefd = open(webpage, O_RDONLY); + n = read(filefd, buff, 2048); + if (n < 0) + { + perror("read"); + close(filefd); + return false; + } + close(filefd); + stat(webpage, &st); + if (write(sockfd, buff, st.st_size) < 0) + { + perror("write"); + return false; + } + } else if(strstr(buff, "user=") != NULL){ + stat(webpage, &st); + username = strstr(buff, "user=") + 5; + username_length = strlen(username); + added_length = username_length + 2; + size = st.st_size + added_length; + n = sprintf(buff, HTTP_200_FORMAT, size); + } + else if(strstr(buff, "guess=Guess") != NULL) { + if(sockfd == user1){ + if(user2_start == 1){ + webpage = "html/4_accepted.html"; + } else { + webpage = "html/5_discarded.html"; + } + } else if(sockfd == user2){ + if(user1_start == 1){ + webpage = "html/4_accepted.html"; + } else { + webpage = "html/5_discarded.html"; + } + } else { + printf("No one is logged in.."); + } + stat(webpage, &st); + n = sprintf(buff, HTTP_200_FORMAT, st.st_size); + + } else { + printf("\n\n\nerror reading html...\n\n\n"); + } // send the header first if (write(sockfd, buff, n) < 0) @@ -169,6 +227,7 @@ static bool handle_http_request(int sockfd) // read the content of the HTML file int filefd = open(webpage, O_RDONLY); n = read(filefd, buff, 2048); + if (n < 0) { perror("read"); @@ -177,7 +236,7 @@ static bool handle_http_request(int sockfd) } close(filefd); - if(strlen(username) > 0){ + if((strlen(username) > 0) && (strstr(buff, "user=") != NULL) ){ // move the trailing part backward int p1, p2; for (p1 = size - 1, p2 = p1 - added_length; p1 >= size - 25; --p1, --p2) @@ -193,6 +252,10 @@ static bool handle_http_request(int sockfd) perror("write"); return false; } + } else { + printf("%s\n", buff); + write(sockfd, buff, st.st_size); + } } else { diff --git a/server b/server index fc50a3489cdca35b6da89c6b3962d7536bcc09c3..0231189ab0ac23a3fdeca41a12affc70eed35476 100755 GIT binary patch delta 3318 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 JoaOS22>^Qer@a6G delta 2253 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 Q11Q`W7(niv<?@UP0PVcNU;qFB -- GitLab