← All posts tagged coding

Вот такой-то байды я точно не ждал. Я даже не представляю как это дебажить теперь.
$php 1.php
ab

<html></html>

$php -dextension=klee.so -dklee.enable=1 1.php
KLEE: output directory = "klee-out-5"
KLEE: WARNING: undefined reference to variable: _CurrentRuneLocale
KLEE: WARNING: undefined reference to function: __assert
KLEE: WARNING: undefined reference to function: __error
KLEE: WARNING: undefined reference to function: __isfinite
KLEE: WARNING: undefined reference to variable: __mb_sb_limit
KLEE: WARNING: undefined reference to variable: __stderrp
KLEE: WARNING: undefined reference to function: fclose
KLEE: WARNING: undefined reference to function: fprintf
KLEE: WARNING: undefined reference to function: getenv
KLEE: WARNING: undefined reference to function: mmap
KLEE: WARNING: undefined reference to function: munmap
KLEE: WARNING: undefined reference to function: printf
KLEE: WARNING: undefined reference to function: siglongjmp
KLEE: WARNING: undefined reference to function: sigsetjmp
KLEE: WARNING: undefined reference to function: sprintf
KLEE: WARNING: undefined reference to function: strcasecmp
KLEE: WARNING: calling external: getenv(34590422144)
KLEE: WARNING: calling external: printf(34720010656)
bb

KLEE: WARNING: unable to write output test case, losing it
<html></html>
KLEE: done: total instructions = 43589
KLEE: done: completed paths = 1
KLEE: done: generated tests = 1

Забавно, я только сейчас понял, что корейцы сделали странную вещь в клиенте ладвы:
Ключ от симметричного алгоритма шифрования у них зашит в клиенте, а ключ от асимметричного присылается сервером. А ведь логичнее было бы сделать с точностью до наоборот.

Оказывается, map<char *, T> надо юзать очень осторожно. Особенно в случае, когда ты ключ берешь из string constant. В некоторых конпеляторах (GCC 4.2.1)
char* a="asdasd";
, объявленное в разных модулях имеет разное значение. Как следствие, если сделать map[a], то туда добавляется новое значение, а не достается старое.
Это было дефолтным поведением в MSVC, поэтому я сначала даже не заподозрил подвоха. Зато clang делает все правильно, надо окончательно на него перелезать.