- 1
Админ - уебок, хранивший пароли открытым текстом
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Админ - уебок, хранивший пароли открытым текстом
Чекайте свои мыла в утечках, ебланы
−2
Удалите мой аккаунт
Удалите мой аккаунт
−2
Удалите мой аккаунт
Удалите мой аккаунт
0
template <typename T, typename... Ts>
struct StructureChain : T, StructureChain<Ts...>
{
StructureChain(const T &t, const Ts&... a) : T(t), StructureChain<Ts...>(a...)
{
((T*)this)->pNext = (StructureChain<Ts...>*)this;
}
};
template <typename T>
struct StructureChain<T> : T
{
StructureChain(const T &t) : T(t){}
};
// Positional arguments? Im my C++? It's more likely than you think!
template<typename T>
struct SetterFunc;
template<typename T, typename V>
struct SetterVal
{
const SetterFunc<T> &func;
const V &val;
SetterVal(const SetterFunc<T> &f, const V &v) : func(f), val(v){}
};
template<typename T>
struct SetterFunc
{
const T &func;
SetterFunc(const T &data)
: func(data)
{}
template <typename V>
SetterVal<T,V> operator() (const V &v) {return SetterVal(*this,v);}
template <typename V>
SetterVal<T,V> operator= (const V &v) {return SetterVal(*this,v);}
};
template <typename T, typename... Ts>
void FillStructure(T &t, const Ts&... ts)
{
auto filler = [](T &t, const auto &arg){
auto T::*ptr = arg.func.func(t);
t.*ptr = arg.val;
};
(filler(t,ts),...);
}
// todo: remove extra unused copy
#define $(k) SetterFunc([](auto a){return &decltype(a)::k;})
template <typename T, typename... Ts>
T $M(T t, const Ts&... ts)
{
FillStructure(t, ts...);
return t;
}
// ...
VkSubresourceLayout layout = {0};
layout.rowPitch = pitch1;
StructureChain iinfo{
$M(VkImageCreateInfo{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO},
$(imageType) = VK_IMAGE_TYPE_2D,
$(format) = p010?VK_FORMAT_R16_UNORM:VK_FORMAT_R8_UNORM,
$(extent) = VkExtent3D{ WIDTH, HEIGHT, 1 },
$(mipLevels) = 1,
$(arrayLayers)= 1,
$(samples) =VK_SAMPLE_COUNT_1_BIT,
$(tiling) = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
$(usage) = VK_IMAGE_USAGE_STORAGE_BIT,
$(sharingMode) = VK_SHARING_MODE_EXCLUSIVE
),
$M(VkExternalMemoryImageCreateInfo{VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO},
$(handleTypes) = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
),
$M(VkImageDrmFormatModifierExplicitCreateInfoEXT{VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT},
$(drmFormatModifierPlaneCount) = 1,
$(drmFormatModifier) = mod,
$(pPlaneLayouts) = &layout
)
};
VK_CHECK_RESULT(vkCreateImage(dev.device, &iinfo, NULL, &texture0.image)); // create image.
Positional arguments? Im my C++? It's more likely than you think!
0
#define EMPTY(...)
#define DEFER(...) __VA_ARGS__ EMPTY()
#define EXPAND(...) __VA_ARGS__
#define PARENS ()
#define CONCAT_IMPL(L, R) L ## R
#define CONCAT(L, R) CONCAT_IMPL(L, R)
#define EVAL(...) __VA_ARGS__
#define EVAL_1(...) __VA_ARGS__
#define EVAL_1_1(...) __VA_ARGS__
#define EVAL_1_2(...) __VA_ARGS__
#define EVAL_2(...) EVAL_1(EVAL_1(__VA_ARGS__))
#define EVAL_4(...) EVAL_2(EVAL_2(__VA_ARGS__))
#define EVAL_8(...) EVAL_4(EVAL_4(__VA_ARGS__))
#define EVAL_16(...) EVAL_8(EVAL_8(__VA_ARGS__))
#define EVAL_32(...) EVAL_16(EVAL_16(__VA_ARGS__))
#define EVAL_64(...) EVAL_32(EVAL_32(__VA_ARGS__))
#define EVAL_128(...) EVAL_64(EVAL_64(__VA_ARGS__))
#define EVAL_256(...) EVAL_128(EVAL_128(__VA_ARGS__))
#define EVAL_512(...) EVAL_256(EVAL_256(__VA_ARGS__))
#define EVAL_1024(...) EVAL_512(EVAL_512(__VA_ARGS__))
#define FOR_EACH_64(MACRO, ...) EVAL_64(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH_128(MACRO, ...) EVAL_128(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH_256(MACRO, ...) EVAL_256(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH_512(MACRO, ...) EVAL_512(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH_1024(MACRO, ...) EVAL_1024(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH(MACRO, ...) EVAL_1024(FOR_EACH_IMPL(MACRO, __VA_ARGS__))
#define FOR_EACH_NEXT() FOR_EACH_IMPL
#define FOR_EACH_IMPL(MACRO, ARG1, ...) MACRO(ARG1)__VA_OPT__(FOR_EACH_NEXT PARENS (MACRO, __VA_ARGS__))
#define SELECT(FIRST, ...) FIRST
#define SELECT_SECOND(FIRST, ...) __VA_ARGS__
#define DISCARD_1(FIRST, ...) SELECT##__VA_OPT__(_SECOND)(FIRST, __VA_ARGS__)
#define REMOVE_PARENTHESES_IMPL(ARG, _, ...) __VA_OPT__(EVAL) ARG
#define REMOVE_PARENTHESES(ARG) EVAL_1(DEFER(REMOVE_PARENTHESES_IMPL)(ARG, CHECK_PARENTHESES ARG))
#define CHECK_PARENTHESES(...) _, __VA_ARGS__
#define MAKE_HELPER_STRUCT(COUNTER, ...) template<EVAL_1024(MAKE_HELPER_STRUCT_IMPL(COUNTER, __VA_ARGS__))
#define MEMBER_POINTER_CONCAT(_, ...) FOR_EACH_256(MEMBER_POINTER_CONCAT_ONCE, __VA_ARGS__)
#define MEMBER_POINTER_CONCAT_ONCE(ARG) auto EVAL_1_1(DEFER(DISCARD_1)(REMOVE_PARENTHESES(ARG))), EMPTY()
#define MAKE_HELPER_STRUCT_IMPL(COUNTER, ARG1, ...) EVAL_1_2(DEFER(MAKE_HELPER_STRUCT_IMPL_DISPATCH)(COUNTER, ARG1, (__VA_ARGS__), CHECK_PARENTHESES ARG1))
#define MAKE_HELPER_STRUCT_IMPL_DISPATCH(COUNTER, ARG1, ARGS, _, ...) MAKE_HELPER_STRUCT_IMPL_TASK##__VA_OPT__(_EXEC)(COUNTER, CONCAT(ARG1, EVAL ARGS), __VA_ARGS__) __VA_OPT__(MAKE_HELPER_STRUCT_NEXT PARENS (COUNTER, EVAL ARGS))
#define MAKE_HELPER_STRUCT_IMPL_TASK(COUNTER, FUNCTIONS, ...) void *> struct intrusive_function_helper_##COUNTER { FUNCTIONS };
#define MAKE_HELPER_STRUCT_IMPL_TASK_EXEC(_1, _2, ...) MEMBER_POINTER_CONCAT(__VA_ARGS__)
#define MAKE_HELPER_STRUCT_NEXT() MAKE_HELPER_STRUCT_IMPL
#define CLASS_CONCAT(CLASS, ...) EVAL_256(CLASS_CONCAT_IMPL(CLASS, __VA_ARGS__))
#define CLASS_CONCAT_IMPL(CLASS, ARG1, ...) &CLASS::EVAL(DEFER(SELECT)(REMOVE_PARENTHESES(ARG1))), __VA_OPT__(CLASS_CONCAT_NEXT PARENS (CLASS, __VA_ARGS__))
#define CLASS_CONCAT_NEXT() CLASS_CONCAT_IMPL
#define MAKE_TEMPLATE_INST(COUNTER, ...) template struct intrusive_function_helper_##COUNTER<EVAL_1024(MAKE_TEMPLATE_INST_IMPL(__VA_ARGS__)) nullptr>
#define MAKE_TEMPLATE_INST_IMPL(ARG1, ...) EVAL_1_1(DEFER(MAKE_TEMPLATE_INST_IMPL_DISPATCH)((__VA_ARGS__), CHECK_PARENTHESES ARG1))
#define MAKE_TEMPLATE_INST_IMPL_DISPATCH(ARGS, _, ...) MAKE_TEMPLATE_INST_IMPL_TASK##__VA_OPT__(_EXEC)(__VA_ARGS__) __VA_OPT__(MAKE_TEMPLATE_INST_NEXT PARENS ARGS)
#define MAKE_TEMPLATE_INST_IMPL_TASK(...)
#define MAKE_TEMPLATE_INST_IMPL_TASK_EXEC(...) CLASS_CONCAT(__VA_ARGS__)
#define MAKE_TEMPLATE_INST_NEXT() MAKE_TEMPLATE_INST_IMPL
#define DEFINE_INTRUSIVE_FUNCTIONS_IMPL(COUNTER, ...) MAKE_HELPER_STRUCT(COUNTER, __VA_ARGS__) MAKE_TEMPLATE_INST(COUNTER, __VA_ARGS__)
#define DEFINE_INTRUSIVE_FUNCTIONS(...) DEFINE_INTRUSIVE_FUNCTIONS_IMPL(__COUNTER__, __VA_ARGS__);
template<class T> T force_create() { char bytes[sizeof(T)]{}; return *reinterpret_cast<T *>(bytes); }
//=======================================================================================//
#include <iostream>
#include <tuple>
class Person {
private:
class BankAccount { int money; } bank_account;
int money;
std::string name;
std::string status;
Person() = delete;
};
DEFINE_INTRUSIVE_FUNCTIONS((Person, name, bank_account, money, status), (Person::BankAccount, (money, bank_money)),
friend Person force_create_person(auto ...args) {
auto p = force_create<Person>();
std::tie(p.*name, p.*status, p.*bank_account.*bank_money, p.*money) = std::make_tuple(args...);
return p;
}
friend void force_print(const Person &p) {
std::cout << p.*name
<< "\n status: " << p.*status
<< "\n bank_money: " << p.*bank_account.*bank_money
<< "\n money: " << p.*money
<< "\n";
}
friend void force_rob(Person &p) {
p.*status = "poor";
p.*bank_account.*bank_money = std::min(0, p.*bank_account.*bank_money);
p.*money = std::min(0, p.*money);
})
Person force_create_person(auto ...args);
void force_print(const Person &p);
void force_rob(Person &p);
int main() {
auto p = force_create_person("John", "rich", 999999, 4242);
force_print(p);
force_rob (p);
force_print(p); // John
// status: poor
// bank_money: 0
// money: 0
}
Принудительный доступ к закрытым членам в C++
0
for(int i = 0; i < p.mDict.TblSize; i++)
for(auto *node = p.mDict.table[i]; node; node = node->n)
for(int j = 0; j < node->v.TblSize; j++)
for(int k = 0; k < node->v.table[j].count; k++ )
if(node->v.table[j][k].v)
Log("Section %s: unused config key %s = %s\n", node->k, node->v.table[j][k].k, node->v.table[j][k].v);
0
int main(int Argcina, char** Argvina) {
int tse_odna_strana_dlya_vseh = (char**)Argcina - Argvina;
return 0;
}
0
switch (lol) {
case E::Foo:
return 1;
case E::Bar:
default:
return 0;
case E::Baz:
return 2;
}
Вы знали, что так можно?
Надо запустить пиваса.
+2
// В преддверии нового года на сайте PVS-Studio увеличилось количества C++ говнокода.
// Во-первых, вышла подбора багов за год, а во-вторых, квиз на поиск багов.
// Первый пример кода из квиза для разминки:
void UObject::setDeltaPitch(const UMatrix &gizmo) {
....
if (_fpzero(amount, eps))
return
rotateAccum.setAnglesXYZ(axis);
....
}
Если заинтересовались, то приятного чтения и удачи в поисках говнокодистых багов. Вас ждёт говнокод первого сорта.
Топ 10 ошибок в C и С++ проектах в 2023 году - https://pvs-studio.ru/ru/blog/posts/cpp/1092/
С++ квиз от PVS-Studio и Сергея Кушниренко - https://pvs-studio.ru/ru/blog/quest/kushnirenko_quiz/
А если что-то останется непонятным в квизе, то есть его разбор - https://pvs-studio.ru/ru/blog/posts/cpp/1091/
С наступающим НГ!
0
// Конкурс для C++ программистов от команды PVS-Studio
// Уникальная возможность получить приз за говнокод с багом!
// https://habr.com/ru/companies/pvs-studio/articles/775388/
Поделитесь своим кодом с ошибкой и участвуйте в розыгрыше 10 книг "Вредные советы для C++ программистов". Подробности в публикации на Хабре: Конкурс для C++ программистов и их любимых багов - https://habr.com/ru/companies/pvs-studio/articles/775388/