BG Development


Страници: (10) 1 2 [3] 4 5 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Сайт за лютеница(галерия) и .htaccess., FcgidWrapper virtual да не е баш virtual
BIGBUGEX
Публикувано на: 28-12-2023, 23:40
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1746
Регистриран на: 30.11.04



И Sun с ударно влизане. Добре. За sprintf трябва да се задели и буфер който да не се прехвърля. Де да знам какъв форматен стринг ще се използва.
PMEmail Poster
Top
SuN
Публикувано на: 29-12-2023, 00:16
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 13463
Регистриран на: 27.01.05



В HTTP 0.9/1, ако не се подаде размера на данните се чете до края на потока (и може би затварянето на връзката). Тогава браузъра разбира, че е получил всичко. Директно може да пращаш данните към клиента без допълнителни буфери.

Не съм специалист, но на моя тестов форум с вграден уеб сървър (на Ц) това работеше. За новите версии на протокола ще трябва да провериш как е.

Това мнение е било редактирано от SuN на 29-12-2023, 00:18


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
relax4o
Публикувано на: 29-12-2023, 01:12
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2849
Регистриран на: 04.04.07



CODE

#include <iostream>

int main()
{
   char* s = nullptr;
   
   int len = sprintf(s, "test test %s test test", "test");
   
   std::cout << "String: " << s << std::endl;
   std::cout << "String length: " << len << std::endl;
   
   return 0;
}


Така не става ли? Резултата изглежда верен и не ми трябваше да знам размера на буфера предварително.

QUOTE (SuN)

Резултата трябва да може да се дебъгва с wget и cat през терминал.


Винаги можеш да пайпнеш резултата към prettier или подобно форматиращо TUI.

Това мнение е било редактирано от relax4o на 29-12-2023, 01:14


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
SuN
Публикувано на: 29-12-2023, 01:32
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 13463
Регистриран на: 27.01.05



QUOTE (relax4o @ 29-12-2023, 01:12)
CODE

#include <iostream>

int main()
{
   char* s = nullptr;
   
   int len = sprintf(s, "test test %s test test", "test");
   
   std::cout << "String: " << s << std::endl;
   std::cout << "String length: " << len << std::endl;
   
   return 0;
}


Така не става ли? Резултата изглежда верен и не ми трябваше да знам размера на буфера предварително.

Бас държа, че това "работи" само под уиндолс в режим за дебъгване.

Иначе под истинска ОС компилатора те хока, ако го попиташ правилно:
CODE
test.cpp: In function ‘int main()’:
test.cpp:7:21: warning: use of NULL ‘s’ where non-null expected [CWE-476] [-Wanalyzer-null-argument]
   7 |    int len = sprintf(s, "test test %s test test", "test");
     |              ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ‘int main()’: events 1-2
   |
   |    5 |    char* s = nullptr;
   |      |          ^
   |      |          |
   |      |          (1) ‘s’ is NULL
   |    6 |
   |    7 |    int len = sprintf(s, "test test %s test test", "test");
   |      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   |      |                     |
   |      |                     (2) argument 1 (‘s’) NULL where non-null expected
   |
In file included from /usr/include/c++/13/cstdio:42,
                from /usr/include/c++/13/ext/string_conversions.h:45,
                from /usr/include/c++/13/bits/basic_string.h:4109,
                from /usr/include/c++/13/string:54,
                from /usr/include/c++/13/bits/locale_classes.h:40,
                from /usr/include/c++/13/bits/ios_base.h:41,
                from /usr/include/c++/13/ios:44,
                from /usr/include/c++/13/ostream:40,
                from /usr/include/c++/13/iostream:41,
                from test.cpp:1:
/usr/include/stdio.h:358:12: note: argument 1 of ‘int sprintf(char*, const char*, ...)’ must be non-null
 358 | extern int sprintf (char *__restrict __s,
     |            ^~~~~~~


За С АПИ-тата не трябва да се гадае, а да се пише по документация. А там е казано, че се иска масив (за размера се подразбира, че е достатъчен).


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
relax4o
Публикувано на: 29-12-2023, 01:42
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2849
Регистриран на: 04.04.07



Пуснах в някакъв онлайн плейграунд на Ц++20 и включени всякакви warning флагове (Wall, Wextra, Wpedantic) и не реве там. Не пише какъв е компилатора.



--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
SuN
Публикувано на: 29-12-2023, 01:49
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 13463
Регистриран на: 27.01.05



Добави -fanalyzer.

Този анализатор не знам дали го стабилизираха, но хваща доста глупави грешки. Така или иначе, в случая пише някъде, но не е правилно.

А И не знаем как се различава средата и библиотеката, щом е от сайт. Например, за Go също предлагат услуга за тестване на код, но ако извикаш функцията Sleep - библиотеката е така пачната, че да не спи, ами ти връща резултата от изпълнението с очакваното време, когато е щял да се изпълни и браузъра бавно ти показва резултата. icon_smile.gif


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
relax4o
Публикувано на: 29-12-2023, 02:07
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2849
Регистриран на: 04.04.07



Само на едно място тръгна кода ми - cpp.sh icon_lol.gif

Всичко останало се компилира без забележки, но пък ми дава segmentation fault.

Трябва да отворя най-накрая C++ Primer книгата.

gcc-то ми (на Мак) иска някакъв аргумент за -fanalyzer (-Xanalyzer). Не знам какво трябва да бъде.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
SuN
Публикувано на: 29-12-2023, 02:16
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 13463
Регистриран на: 27.01.05



Не се притеснявай. И на най-добрите се случва. Ето например в този файл (https://github.com/BIGBUGEX/bialo-plus.site/blob/main/fcgi-site.cbp) имаме:
CODE

                  <Add option="-Wno-invalid-offsetof" />

За което пише:
QUOTE
Suppress warnings from applying the offsetof macro to a non-POD type. According to the 2014 ISO C++ standard, applying offsetof to a non-standard-layout type is undefined. In existing C++ implementations, however, offsetof typically gives meaningful results. This flag is for users who are aware that they are writing nonportable code and who have deliberately chosen to ignore the warning about it.


Не бих се учудил и сайтчето да работи само на хоста, на който е тествано. icon_smile.gif


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
BIGBUGEX
Публикувано на: 29-12-2023, 04:49
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1746
Регистриран на: 30.11.04



QUOTE (SuN @ 29-12-2023, 02:16)
Не се притеснявай. И на най-добрите се случва. Ето например в този файл (https://github.com/BIGBUGEX/bialo-plus.site/blob/main/fcgi-site.cbp) имаме:
CODE

                  <Add option="-Wno-invalid-offsetof" />

За което пише:
QUOTE
Suppress warnings from applying the offsetof macro to a non-POD type. According to the 2014 ISO C++ standard, applying offsetof to a non-standard-layout type is undefined. In existing C++ implementations, however, offsetof typically gives meaningful results. This flag is for users who are aware that they are writing nonportable code and who have deliberately chosen to ignore the warning about it.


Не бих се учудил и сайтчето да работи само на хоста, на който е тествано. icon_smile.gif

На всеки хост ще бачка. Проблема ще дойде когато компилаторите започнат да преподреждат родителския клас. Като стане това будни граждани ще ме изровят да пренапиша това парче код:
CODE
struct container_c {
      struct open_c: element_c {
            virtual void write( std::ostream &os ) { ( (container_c*)( (char*)this - offsetof( container_c, open ) ) ) -> cont_begin( os ); }
      } open;
      struct close_c: element_c {
            virtual void write( std::ostream &os ) { ( (container_c*)( (char*)this - offsetof( container_c, close ) ) ) -> cont_end( os ); }
      } close;
      virtual void cont_begin( std::ostream &os ) = 0;
      virtual void cont_end( std::ostream &os ) = 0;
};
PMEmail Poster
Top
ici
Публикувано на: 29-12-2023, 10:49
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 19077
Регистриран на: 06.06.04



QUOTE (relax4o @ 28-12-2023, 01:26)
Леко извратено ми се струва хаха.

Следваща задача: Да се напише template engine и да изнесеш HTML-а в отделни файлове.

Има такова нещо, имаше го и в началото на 90-те като пишех sgi за IBM AS/400, SCO UNIX и Univell UNIX. Има го и сега, използвам го за ембедед с LwIP. нарича се "Server Side Include" - SSI.

QUOTE (relax4o @ 28-12-2023, 13:01)
Между другото не знам защо си се занимавал слагаш \n из HTML-а ти. Като цяло е ненужно, освен ако няма да го четеш после в браузъра.

Иначе sprintf може да стане малко по-изчистено. Няма да се налага да прекъсваш постоянно с << за да добавиш променлива.

М-да-а, *printf и *scanf са много обектни. По принцип всяка конекция си има отделна нишка/процес които са reentrant и имат стандартни потоци за вход и изход които се занимават с буферирането/заделянето на памет. Буферирането е пълно, т.е. физически изход има при препълване на буфера или flush и обикновено е равен/кратен на MTU за да имаме максимална скорост на трансфер. Между другото sprintf НЕ ТРЯБВА да се използва по принцип, като изключение може да се използва sNprintf

Това мнение е било редактирано от ici на 29-12-2023, 10:52


--------------------
Facebook is a bit like checking your underwear after a fart.
Most likely there's nothing new and if there is it's probably shit.
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (10) 1 2 [3] 4 5 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0