From e8c0f8dbccd02f496fe994b3951700a699c7c041 Mon Sep 17 00:00:00 2001 From: Merlin Baviere <merlin.baviere@student-cs.fr> Date: Thu, 20 Mar 2025 21:18:42 +0100 Subject: [PATCH] fini TP 1 --- config/concat.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ config/cwe20.c | 12 ++++++++++-- config/replace.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 config/concat.c create mode 100644 config/replace.c diff --git a/config/concat.c b/config/concat.c new file mode 100644 index 0000000..fb39ff9 --- /dev/null +++ b/config/concat.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "__fc_builtin.h" +#include "libstring.h" + +#define MAX_LEN 255 + +int main() { + string_t *str1, *str2, *result; + char buffer1[MAX_LEN + 1]; + char buffer2[MAX_LEN + 1]; + + for (int i = 0; i < MAX_LEN; i++) { + buffer1[i] = (char) Frama_C_interval(1, 127); + buffer2[i] = (char) Frama_C_interval(1, 127); + } + Frama_C_show_each_buffer1(buffer1); + Frama_C_show_each_buffer2(buffer2); + + buffer1[MAX_LEN] = '\0'; + buffer2[MAX_LEN] = '\0'; + + str1 = string_new(buffer1); + if (!str1) return 1; + + str2 = string_new(buffer2); + if (!str2) { + free(str1); + return 1; + } + + result = string_concat(str1, str2); + if (!result) { + free(str1); + free(str2); + return 1; + } + + printf("Concatenated string: %s\n", result->buf); + + free(result); + free(str1); + free(str2); + + return 0; +} diff --git a/config/cwe20.c b/config/cwe20.c index 9a72365..ed4693a 100644 --- a/config/cwe20.c +++ b/config/cwe20.c @@ -16,18 +16,26 @@ int main () { board_square_t *board; printf("Please specify the board height: \n"); error = scanf("%d", &m); - if ( EOF == error ){ + if ( EOF == error || m <= 0){ die("No integer passed: Die evil hacker!\n"); } printf("Please specify the board width: \n"); error = scanf("%d", &n); - if ( EOF == error ){ + if ( EOF == error || n <= 0){ die("No integer passed: Die evil hacker!\n"); } if ( m > MAX_DIM || n > MAX_DIM ) { die("Value too large: Die evil hacker!\n"); } + //@ split m; + //@ split n; board = (board_square_t*) malloc( m * n * sizeof(board_square_t)); + + if(!board){ + printf("malloc failed\n"); + return 2; + } + for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { board[n*i+j] = 0; diff --git a/config/replace.c b/config/replace.c new file mode 100644 index 0000000..857463b --- /dev/null +++ b/config/replace.c @@ -0,0 +1,49 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "__fc_builtin.h" +#include "libstring.h" + +#define FIXED_LEN 20 + +int main() { + string_t *str, *old_char, *new_char, *result; + char buffer[FIXED_LEN + 1]; + + for (int i = 0; i < FIXED_LEN; i++) { + buffer[i] = (char) Frama_C_interval(65, 90); // Lettres majuscules A-Z + } + buffer[FIXED_LEN] = '\0'; + + str = string_new(buffer); + if (!str) return 1; + + char old_c = (char) Frama_C_interval(65, 90); + char new_c = (char) Frama_C_interval(97, 122); + + old_char = string_new(&old_c); + new_char = string_new(&new_c); + + if (!old_char || !new_char) { + free(str); + return 1; + } + + result = string_replace(str, old_char, new_char); + if (!result) { + free(str); + free(old_char); + free(new_char); + return 1; + } + + printf("Original: %s\n", str->buf); + printf("Replaced: %s\n", result->buf); + + free(result); + free(str); + free(old_char); + free(new_char); + + return 0; +} -- GitLab