тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
08.03.2021 в 19:49
Пишет Stalkert:Надкусанные эпично проговнокодились в iCloudURL записиhttps://www.ixbt.com/news/2021/03/08/slozhnye-otnoshenija-apple-s-pravdoj-dev...
Жила была (и продолжает) американская девушка по фамилии True. И был у нее аккаунт эплячий, айклаудячий с разными данными. Пока она не стала обновлять аккаунт и чего-то как-то недосмотрела и ввела фамилию с маленькой буквы - true
А потом, парам-пам-пам-пам. При попытке добраться до своего пушистого облачка она получила фруктом на всю физиономию:
REPORTED ERROR TITLE
Type error: cannot set value `true` to property `lastName` on...
REPORTED ERROR TYPE
UNHANDLED_EXCEPTIONИ все бы ничего, но по ее словам, часы общений с техподдержкой в течение полугода ни к чему не привели, хотя деньги исправно взимались. И если я правильно понял, проблема так и не решена.
Вот так пишут и сопровождают код в некоторых коммерческих продуктах.
как такое могло произойти, что строка (ввод пользователя) сама собою поменяла тип на boolean без явной команды на преобразование типа со стороны программиста?
в языке есть какая-то специальная фича, позволяющая так забавно выстрелить себе в ногу?
Посему переходите на языки со строгой типизацией и будет вам счастье, не выстрелите.
в языке есть какая-то специальная фича, позволяющая так забавно выстрелить себе в ногу?
В языке вряд ли, скорее, в самой логике что-то не так сделали, недовалидировали.
И если включили мозг и стали её использовать.
Да и не совсем понятно, при чём здесь php и iCloud.
Наверное, совсем ни при чём. Я не знаю, на чём там в действительности написано. Но общий принцип, отчего такие вещи могут возникать, он такой, а php чисто как пример.
а что тут валидировать?
"true" - на 100% валидная строка, пользователь не должен получить отказ валидации если ввёл её
а вот выражение типа
Object(s)
переводящее строку s == "true" в булево значение, вполне могло быть той самой неприятной фичей языка
Сообщение больше похоже на Dart/Metal/ObjC, где такое очень вероятно по умолчанию. Там чтобы этого избежать надо специально писать что-то в духе json.decode(req.body)?.isNotEmpty == true