<commit_before>/* --------------------------------------------------------- */
/* Objectif : Corriger les erreurs statiques et dynamiques   */
/*            de ce programme                                */
/* --------------------------------------------------------- */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


int main(int argc, char *argv[])
{
	/* On ne touche pas  la variable "size" */
    int size = 16;
    int length = 0;
    char * buf;
	
	printf(argv[1]);
	
	buf = (char*)malloc(sizeof(char)*size + 1);
	
	strncpy(buf, argv[2],  sizeof(buf));
	printf("buffer : %s\n", buf);
	
	/* ----------------------------------------------------- */
	/* On ne touche pas au contenu "testdubuffer"            */
    /* mais on peut crer une variable reprenant ce contenu  */
	/* ----------------------------------------------------- */
	strncpy(buf, "testdubuffer", sizeof(buf));	
	
	length = strlen(buf);
    if(length != 0)
        printf("buffer : %s\n", buf);
    else
        free(buf);
		
	return 0;
}<commit_msg>improved robustness of dynstat, removed memory leak<commit_after>/* --------------------------------------------------------- */
/* Objectif : Corriger les erreurs statiques et dynamiques   */
/*            de ce programme                                */
/* --------------------------------------------------------- */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


int main(int argc, char *argv[])
{
	/* On ne touche pas  la variable "size" */
    int size = 16;
    int length = 0;
    char * buf = NULL;
	
	
	/* Verification du nombre d'argument 
	   passer lors de l'appel de la fonction */
	if(argc != 3) {
		printf("usage : dynstat arg1 arg2\n");
		return -1;
	}

	/* utilisation du format de chaine de caracteres 
	   pour eviter une format string attack */
	printf("%s\n", argv[1]);

	/* allocation et initialisation de la memoire allouee a zero 
	   erreur valgrind : Uninitialised value was created by a heap allocation */
	buf = (char*)calloc(sizeof(char)*(size + 1), 1);

	/* verification que l'allocation memoire a bien ete effectuee */
	if(buf == NULL) {
		printf("could not allocate space for buffer\n");
		return -1;
	}

	/* changement de sizeof(buf) a size danger potentiel CWE-467*/	
	strncpy(buf, argv[2], size);

	/* assure que la chaine se termine bien par le caractere 
	   de fin de chaine */
	buf[size] = '\0';

	/* verifie que la chaine copier correspond bien a celle
	   passee en argument */
	if(strcmp(buf, argv[2]) != 0) {
		printf("arg2 length exceed the limit of %d", size);
		free(buf);
		return -1;
	}

	printf("buffer : %s\n", buf);
	
	/* ----------------------------------------------------- */
	/* On ne touche pas au contenu "testdubuffer"            */
	/* mais on peut crer une variable reprenant ce contenu  */
	/* ----------------------------------------------------- */
	
	/* CWE-467, pas besoin de verification etant sur de notre utilisation */
	strncpy(buf, "testdubuffer", size);	
	
	length = strlen(buf);
    	if(length != 0) {
        	printf("buffer : %s\n", buf);
        }

	/* libere la memoire dynamiquement allouee quoi qu'il arrive
	   et evite donc la fuite memoire reperee par valgrind */
	free(buf);
		
	return 0;
}
{'fraction_non_alphanumeric': 0.25473161650636056, 'fraction_numerical': 0.010238907849829351, 'mean_word_length': 1.6211382113821138, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5225434', 'n_tokens_mistral': 1011, 'n_tokens_neox': 938, 'n_words': 308}