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