Первоначально это происходит с https://github.com/dahlia/libsass-python/pull/149
Мне трудно понять, почему это происходит, но я выложу то, что у меня есть :)
Эта фиксация, похоже, вызывает проблему, которую я вижу: https://github.com/sass/libsass/commit/527f3a8 (# 2025)
Проверка предыдущей версии (f8cad4e) кажется успешной.
Вы можете просмотреть код здесь, если это проще: https://github.com/asottile/libsass/commit/f40ae24025234b73ca86adece62dec0e35884eb1
main.cpp
#include <sass/context.h>
#include <iostream>
int main() {
std::cout << "Making data context" << std::endl;
struct Sass_Data_Context* context = sass_make_data_context(sass_copy_c_string(""));
std::cout << "Compiling data context" << std::endl;
sass_compile_data_context(context);
std::cout << "Getting output context" << std::endl;
struct Sass_Context* ctx = sass_data_context_get_context(context);
std::cout << "Printing error status" << std::endl;
std::cout << sass_context_get_error_status(ctx) << std::endl;
std::cout << "Printing error message" << std::endl;
std::cout << sass_context_get_error_message(ctx) << std::endl;
sass_delete_data_context(context);
return 0;
}
test.bat
"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" ^
/I.\include -ID:\Programs\VS2015\VC\INCLUDE ^
/c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT ^
src/*.c
"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" ^
/I.\include ^
"-ID:\Programs\VS2015\VC\INCLUDE" ^
"-ID:\Programs\VS2015\VC\ATLMFC\INCLUDE" ^
"-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" ^
"-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" ^
"-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" ^
"-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" ^
"-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" ^
/c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT ^
./main.cpp src/*.cpp
"D:\Programs\VS2015\VC\BIN\amd64\link.exe" ^
"-LIBPATH:D:\Programs\VS2015\VC\LIB\amd64" ^
"-LIBPATH:D:\Programs\VS2015\VC\ATLMFC\LIB\amd64" ^
"-LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" ^
"-LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" ^
"-LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" ^
"-INCREMENTAL:NO" "-OUT:main.exe" "-Debug" "-nologo" "-LTCG" ^
*.obj
main.exe
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" /I.\include -ID:\Programs\VS2015\VC\INCLUDE /c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT src/*.c
c99func.c
cencode.c
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" /I.\include "-ID:\Programs\VS2015\VC\INCLUDE" "-ID:\Programs\VS2015\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT ./main.cpp src/*.cpp
main.cpp
ast.cpp
base64vlq.cpp
bind.cpp
src/bind.cpp(175): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
color_maps.cpp
constants.cpp
context.cpp
cssize.cpp
emitter.cpp
environment.cpp
error_handling.cpp
eval.cpp
expand.cpp
extend.cpp
file.cpp
functions.cpp
inspect.cpp
json.cpp
lexer.cpp
listize.cpp
Compiling...
memory_manager.cpp
node.cpp
output.cpp
parser.cpp
plugins.cpp
position.cpp
prelexer.cpp
remove_placeholders.cpp
sass.cpp
sass2scss.cpp
sass_context.cpp
sass_functions.cpp
sass_util.cpp
sass_values.cpp
source_map.cpp
to_c.cpp
to_value.cpp
units.cpp
utf8_string.cpp
util.cpp
Compiling...
values.cpp
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\link.exe" "-LIBPATH:D:\Programs\VS2015\VC\LIB\amd64" "-LIBPATH:D:\Programs\VS2015\VC\ATLMFC\LIB\amd64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" "-INCREMENTAL:NO" "-OUT:main.exe" "-Debug" "-nologo" "-LTCG" *.obj
Generating code
Finished generating code
C:\Users\Anthony\Desktop\git\libsass-python\libsass>main.exe
Making data context
Compiling data context
Getting output context
Printing error status
3
Printing error message
Internal Error: Data context created with empty source string
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" /I.\include -ID:\Programs\VS2015\VC\INCLUDE /c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT src/*.c
c99func.c
cencode.c
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\cl.exe" /I.\include "-ID:\Programs\VS2015\VC\INCLUDE" "-ID:\Programs\VS2015\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /c /nologo /W3 /WX- /GL /DNDEBUG -O2 /Oi /Zi /EHsc /MT ./main.cpp src/*.cpp
main.cpp
ast.cpp
base64vlq.cpp
bind.cpp
src/bind.cpp(175): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
color_maps.cpp
constants.cpp
context.cpp
cssize.cpp
emitter.cpp
environment.cpp
error_handling.cpp
eval.cpp
expand.cpp
extend.cpp
file.cpp
functions.cpp
inspect.cpp
json.cpp
lexer.cpp
listize.cpp
Compiling...
memory_manager.cpp
node.cpp
output.cpp
parser.cpp
plugins.cpp
position.cpp
prelexer.cpp
remove_placeholders.cpp
sass.cpp
sass2scss.cpp
sass_context.cpp
sass_functions.cpp
sass_util.cpp
sass_values.cpp
source_map.cpp
to_c.cpp
to_value.cpp
units.cpp
utf8_string.cpp
util.cpp
Compiling...
values.cpp
C:\Users\Anthony\Desktop\git\libsass-python\libsass>"D:\Programs\VS2015\VC\BIN\amd64\link.exe" "-LIBPATH:D:\Programs\VS2015\VC\LIB\amd64" "-LIBPATH:D:\Programs\VS2015\VC\ATLMFC\LIB\amd64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "-LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" "-INCREMENTAL:NO" "-OUT:main.exe" "-Debug" "-nologo" "-LTCG" *.obj
Generating code
Finished generating code
C:\Users\Anthony\Desktop\git\libsass-python\libsass>main.exe
Making data context
Присоединение отладчика в случае сбоя дает следующее сообщение:
Unhandled exception at 0x00007FF77A8F8814 in main.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.
И сбрасывает точку останова по адресу: https://github.com/sass/libsass/blob/527f3a8/src/sass_context.cpp#L143
Во-первых: clap: для этого отчета об ошибке, почти сразу, как мы этого хотим. Если вы потратите время на замену D:\Programs
на ProgramFiles(x86)
и установите Visual Studio по стандартному пути ( Microsoft Visual Studio 12.0
AFAIK) в следующий раз, я официально назначу его для отчета об ошибке год: ухмылка:
Здесь уже поздно, но загляну ...
Кажется, удаление /GL
(оптимизация программы) устраняет проблему ...
Чтобы уточнить, я получаю segfault, когда включена оптимизация ... хорошо, у вас то же самое.
Поскольку вы говорите, что он пришел с недавно добавленной попыткой, я подозреваю, что проблемы с раскручиванием стека.
Это часто связано с параметрами компилятора, но пока рано говорить что-либо определенное.
Сделаю и доложу. На моем твердотельном накопителе не хватает места, поэтому мне, вероятно, придется развернуть виртуальную машину.
Переход на /GR
делает свое дело! - Думаю, я могу исправить это во флагах, которые передаю в setuptools (python).
Спасибо за совет!
Хммм ... это немного сложно сделать, так как это некоторые значения по умолчанию, которые трудно переопределить - есть идеи, почему эта фиксация нарушает /GL
?
Да, потому что память, вероятно, более скремблирована, поэтому, вероятно, также легче получить ошибки сегментации через висячие указатели или переполнение буфера и т.д. первый раз. Исправление ведется, еще немного напишу в ПР.
<3 ты лучший
Если вам нравится думать об этом самостоятельно, это оскорбительная строка:
sass_copy_c_string(msg_stream.str().c_str())
См. Https://github.com/sass/libsass/pull/2048 для предлагаемого исправления. Спасибо за отчет!
Я помню что-то похожее на это в каком-то коде, который я написал довольно давно - я думал, что стандарт защищен от временного сбора строки, но, возможно, нет.
Этот патч, кажется, делает код успешным:
diff --git a/src/sass_context.cpp b/src/sass_context.cpp
index e3f34af..9105866 100644
--- a/src/sass_context.cpp
+++ b/src/sass_context.cpp
@@ -140,7 +140,8 @@ extern "C" {
json_append_member(json_err, "message", json_mkstring(e.what()));
json_append_member(json_err, "formatted", json_mkstring(msg_stream.str().c_str()));
try { c_ctx->error_json = json_stringify(json_err, " "); } catch(...) {}
- c_ctx->error_message = sass_copy_c_string(msg_stream.str().c_str());
+ std::string s = msg_stream.str();
+ c_ctx->error_message = sass_copy_c_string(s.c_str());
c_ctx->error_text = sass_copy_c_string(e.what());
c_ctx->error_status = 3;
c_ctx->output_string = 0;
ох милая, мы пришли к такому же выводу: D
Да, видел это раньше с управлением памятью, где деструктор вызывался в нечетном порядке, что приводило в основном к той же проблеме (тот же компилятор).
Ах, теперь я вспомнил, что именно по этой причине (AFAIR) у нас есть макрос SASS_MEMORY_NEW
для размещения новых объектов. Это был PR: https://github.com/sass/libsass/pull/1462 ... не уверен на 100%, но моя интуиция говорит, что у них обоих один и тот же общий корень.
Хороший улов, вы все
25 апреля 2016 г. в 9:29 «Марсель Гретер» [email protected] написал:
Закрыт # 2046 https://github.com/sass/libsass/issues/2046 через # 2048
https://github.com/sass/libsass/pull/2048.-
Вы получаете это, потому что подписаны на эту ветку.
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/sass/libsass/issues/2046#event -639249983