Няшная / Говнокод #29085 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {
	size_t buflen;
	size_t i;
	char *obuffer;
	if (argc != 2) {
		fprintf(stderr, "Usage: %s 'some ASCII string'\n", argv[0]);
		fprintf(stderr, "\tconvert the string into overlong UTF-8.\n");
		return 1;
	}
	buflen = strlen(argv[1])*2+1;
	obuffer = malloc(buflen);
	if (obuffer == NULL) {
		fprintf(stderr, "Error: cannot allocate %zd bytes of memory.", buflen);
		return 2;
	}
	for (i=0; argv[1][i]; i++) {
		obuffer[2*i]   = 0xC0|(argv[1][i]>>6);
		obuffer[2*i+1] = 0x80|(argv[1][i]&0x3F);
	}
	obuffer[2*i] = '\0';
	puts(obuffer);
	free(obuffer);
	return 0;
}

В UTF-8 запрещено использовать кодовые последовательности не минимальной длины, например юникоды с номером до 127 требуется кодировать именно в один байт, а не в 2,3 и так далее. А если так всё-таки сделать, полученная фигня называется оверлонгом (overlong). Вот этот код их как раз и создаёт. Но только из ASCII символов и расширяя их только до двух байт. Написание более универсального варианта, если вдруг кому-то надо оставляем как упражнение для читателя.

Что интересно, некоторые текстовые редакторы, если в них открыть файл, сделанный этой программой, увидят обычный текст.

Запостил: Threadwalker Threadwalker, (Updated )

Комментарии (5) RSS

  • Какой простор для стеганографии...
    Ответить
  • они увидят двубайтовый юникод мож?
    Ответить
    • UTF-8 с оверлонгами отличается от UTF-16. Во-второй нули если кодируются ASCII.
      Ответить
  • @Что интересно, некоторые текстовые редакторы, если в них открыть файл, сделанный этой программой, увидят обычный текст.

    Что интересно, некоторые текстовые редакторы, если в них открыть файл, сделанный этой программой, покажут обычный текст.

    А что они должны показать? Непечатаемые символы?
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8