labfy-investigation/tests/fake_document_tool.c
2026-07-28 07:15:49 +02:00

85 lines
2.5 KiB
C

/******************************************************************************
* @file fake_document_tool.c
* @brief Faux outil documentaire synthétique, sans shell.
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static int has_argument(int argc, char **argv, const char *value)
{
for (int index = 1; index < argc; index++)
if (strcmp(argv[index], value) == 0)
return 1;
return 0;
}
static const char *find_pdf_path(int argc, char **argv)
{
for (int index = 1; index < argc; index++)
if (strstr(argv[index], ".pdf") != NULL)
return argv[index];
return "";
}
int main(int argc, char **argv)
{
if (has_argument(argc, argv, "-ver"))
{
puts("13.00");
return 0;
}
if (has_argument(argc, argv, "--version"))
{
puts("tesseract 5.0.0-synthetic");
return 0;
}
if (has_argument(argc, argv, "-j"))
{
puts("[{\"File:MIMEType\":\"image/png\","
"\"File:FileSize\":42,\"EXIF:ImageWidth\":10,"
"\"EXIF:GPSLatitude\":48.5,\"EXIF:GPSLongitude\":2.2,"
"\"EXIF:SyntheticBoolean\":true}]");
return 0;
}
if (has_argument(argc, argv, "-enc"))
{
const char *path = find_pdf_path(argc, argv);
if (strstr(path, "native") != NULL)
{
puts("Texte synthétique suffisamment long pour être considéré "
"comme exploitable dans cette fixture.\fDeuxième page.");
}
return 0;
}
if (has_argument(argc, argv, "-singlefile"))
{
const char *prefix = argv[argc - 1];
char path[4096];
if (snprintf(path, sizeof(path), "%s.png", prefix) < 0)
return 2;
FILE *file = fopen(path, "wb");
if (file == NULL)
return 3;
fputs("synthetic-image", file);
fclose(file);
return 0;
}
if (has_argument(argc, argv, "stdout"))
{
if (strstr(argv[1], "sleep") != NULL)
sleep(2);
if (strstr(argv[1], "page-2") != NULL)
puts("Texte OCR synthétique page deux.");
else
puts("Texte OCR synthétique page une.");
return 0;
}
const char *path = find_pdf_path(argc, argv);
if (strstr(path, "encrypted") != NULL)
puts("Pages: 2\nEncrypted: yes");
else
puts("Pages: 2\nEncrypted: no");
return 0;
}