mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 00:16:11 +00:00
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
/* Tests for some interesting cases in non-standard strlcpy(). */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <strings.h>
|
|
|
|
int main(void)
|
|
{
|
|
size_t copied;
|
|
|
|
char *src = malloc(100);
|
|
if (src == NULL) {
|
|
fprintf(stderr, "Memory allocation failure.\n");
|
|
return 1;
|
|
}
|
|
strcpy(src, "Hey, dude!");
|
|
|
|
char *dst = malloc(10);
|
|
if (dst == NULL) {
|
|
fprintf(stderr, "Memory allocation failure.\n");
|
|
return 1;
|
|
}
|
|
|
|
/* This is ok. */
|
|
copied = strlcpy(dst, src, 10);
|
|
if (copied != 10)
|
|
fprintf(stderr, "Expected 10 but got %zu for test #1.\n", copied);
|
|
|
|
/* Here dst is not large enough. */
|
|
copied = strlcpy(dst, src, strlen(src) + 1);
|
|
if (copied != 10)
|
|
fprintf(stderr, "Expected 10 but got %zu for test #2.\n", copied);
|
|
|
|
/* This is just a fancy way how to write strlen(src).
|
|
Undocumented but heavily used. */
|
|
copied = strlcpy(NULL, src, 0);
|
|
if (copied != 10)
|
|
fprintf(stderr, "Expected 10 but got %zu for test #3.\n", copied);
|
|
|
|
/* Source and destination overlap. */
|
|
strlcpy(src + 9, src, strlen(src) + 1);
|
|
/* Return value is not checked because function behaviour
|
|
is undefined in such case (and valgrind's differs). */
|
|
|
|
return 0;
|
|
}
|
|
|