metaclass: (Default)
[personal profile] metaclass
Есть такой оккультный стек-трейс: https://gist.github.com/def1fa8666a8ac83130a.
Причина в том, что в деконструктор массивов кложури вида (let [sql & params] some-array] передан пустой массив и строка sql в таком случае становится null и оный null передается в jdbc драйвер.
Строка на которой валится NPE, выглядит следующим образом:
protected boolean checkForEscapes(String sql) {
sql = sql.toLowerCase();

А вопрос, вообще говоря, в следующем: почему никто не проверяет параметр на валидность хотя бы в одной точке входа в одной из трех либ (clojure.java.jdbc, apache dbcp или jaybird)?

Выглядит так, как будто нормальную проверку параметров на валидность на границах API в жабе делать не принято.

PS: [livejournal.com profile] artureg упорно убеждает меня, что "пусть валится", потому что проверка должна быть "в другом слое". Судя по всему, все разработчики думают, что обработка ошибок должна быть в другом слое :)

Date: 2012-10-10 08:05 am (UTC)
From: [identity profile] jdevelop.livejournal.com
вы знаете, раньше для меня стандартом ебанутости стектрейса был стектрейс спрингового приложения или какого-нибудь уёбложика

теперь это определенно кложура.

Date: 2012-10-10 08:14 am (UTC)
From: [identity profile] metaclass.livejournal.com
В F# та же срань - doInvoke.Invoke$.$Invoker_random$shit$here_ и так на 100 строк)

Date: 2012-10-10 08:14 am (UTC)
From: [identity profile] metaclass.livejournal.com
Покажи аналогичный скальный трейс?

Date: 2012-10-10 08:16 am (UTC)
From: [identity profile] dr-hyder.livejournal.com
У груви обычно даже длиннее. Как звучит то!

Date: 2012-10-10 08:31 am (UTC)
From: [identity profile] zmila.livejournal.com
http://farm6.static.flickr.com/5234/5884828092_7351ae6115.jpg

"The stack trace doesn’t fit in that large monitor in portrait mode. Guys, stop breaking your programs into many functions. Put all your code in one function and your stack traces will be shorter."
:)

Date: 2012-10-10 08:47 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Так вот зачем нужно много длинных мониторов! :)

Date: 2012-10-10 09:33 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Для длинных мониторов нужны горизонтальные логи!

Date: 2012-10-10 12:10 pm (UTC)
From: [identity profile] zmila.livejournal.com
да! адёшь логи-online-неры! :)

Date: 2012-10-10 08:52 am (UTC)
From: [identity profile] kiryl.livejournal.com
Как хорошо, что в ядре стек всего 8k и такой пиздец туда просто не влезет. :)

Date: 2012-10-10 09:04 am (UTC)
From: [identity profile] metaclass.livejournal.com
8k, 4(или 8 байт на адрес возврата), стекфреймы делаем или нет?
в пределе можно 2048 строк в стеке сделать, по идее :)

Date: 2012-10-10 09:33 am (UTC)
From: [identity profile] kiryl.livejournal.com
На x86-64 минимальный stackframe, насколько я помню, 16 байт (код возврата + предыдущее значения rbp). Таким образом 512 вырожденых функций.

Реальные функции имеют переменные на стеке. -fstack-protector, наверно, тоже какой-то оверхед на стеке имеет. Реально 40-50 вложенных функций максимум, но и за такое нужно руки отрывать.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 15th, 2025 09:57 am
Powered by Dreamwidth Studios