Re: [Lug-bg] C va args
- Subject: Re: [Lug-bg] C va args
- From: Nedko Arnaudov <nedko@xxxxxxxxxxxxx>
- Date: Tue, 03 Jul 2012 03:01:13 +0300
- Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEX///8HBgUeFhGwUjwr NDF5RjOgVz2UVTxxTz9pNSXCiW2OUjhNIxi6bE6ROChWammgrK7+pa2IAAAAAXRSTlMAQObYZgAA AkxJREFUeAGtlAuTgyAMhK9gIGl4+P9/7W2wVbBo52YOZ2of+djdBPtT/7h+/lhf/wNYXFtLu38Y OCss7jEut4zMCTiXGzwiA7CMm78+XQPzemC9q15hun/7sovRAZcCg8QBfPRnF3QPd0jswHW9gUeK rwC2nwPTCRyudk9vhXtHXYgT4FxKOEn7zu83R+o3ULefUipKxjTn73LcPyzVbdck0YdAclJxE8C2 hKHiM5ZKGm1NLFn9IyUNBoQzMZsDjCKxD89sl6dBYwJYCFgi/8TKGfWWYzPmDkfdM40nEgRSWIYE NREkQcdMem9SBzAStJJiCaxcpOAy4HDUARWbJyyRAKKwzbBoKQmAzBSqw/7iOJaYC+mTSYtiJs3d FFjggTkGKr54r6gPwRoMZboASonB+wJA2/wQ32tysfAU4MWr97kBuLdx4FNy5QKoCfVYprCdEAhE tFY7gb5LlcnqMwIgBASaI3S4S1AHoO7ASwH+bCTdFE4AmxP4wcIJMQFPaN01YBI5F7QT9wagq5KO FuHd/sS1b8VCUMTeofUV07gH4Cno1iuo2BQY079RqKSK49MWYcyBSOgWEMWk2iCsUV4RQW6BNopN wYJYBB7GcAqN2UXLbc3Cssyk9wpiw7NimwPqkemLArVZGBKIhWP8qkCExyaHHBn+Y4iR+rP3mQH1 zKpMuDjmZ8DHfhDjpCsyYkUsxqsZy3EcxAgsDUCl/TnZYcJLgLVOogPWKkIB/rHzVm9QyGzE+mZ2 YF1XHAQcPPy51kOhecI06vpCfgFqlF1IG9UTLgAAAABJRU5ErkJggg==
Georgi Chorbadzhiyski <gf@xxxxxxxxxxx> writes:
> Е, понеже никой не пише тук освен спамери, я да се направя и аз на спамер.
>
> Моля някой който разбира повече от мен от C (би трябвало да са бая народ :)
> да ми светне лампата как да оправя следната атачната "програма". Функцията
> show2 не работи, резултатът от изпълнението на програмата е:
>
> show:1 test
> show:2 test
> show:3 test
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show3:1 test
> show:show3:1 test
> show:show3:2 test
> show:show3:3 test
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show2:-1079180764 show:%s
> show:show3:1 test
> show:show3:1 -est
> show:show3:2 t-st
> show:show3:3 te-t
>
> когато show2 и show3 трябва да правят едно също. И друг път съм имал подобен
> проблем с va_start, когато го ползвам по подобен начин (от една моя функция
> викам друга и в двете искам да ползвам va_start/va_end).
>
> Приложената програма се компилира с gcc vl.c -o vl
В show2() пъхаш va_list в стека за разлика от show3() където се пъхат
самите аргументи. Прикачил съм кръпка дето променя имплементацията на
vsnprintf_sensitive() да работи с show2. Може би е по-добре да промениш
прототипа на vsnprintf_sensitive() вместо ... да приема va_list, по
подобие на библиотечната vsnprintf().
--- vl.c.orig 2012-07-03 02:50:38.882837484 +0300
+++ vl.c 2012-07-03 02:52:55.608826316 +0300
@@ -7,8 +7,10 @@
static char *vsnprintf_sensitive(char *result, int result_size, int remove_sensitive, char *fmt, ...) {
// Get the resulting string
va_list params;
+ va_list params2;
va_start(params, fmt);
- vsnprintf(result, result_size, fmt, params);
+ params2 = va_arg(params, va_list);
+ vsnprintf(result, result_size, fmt, params2);
va_end(params);
// Filter sensitive information
int i, n = strlen(result), p = 0;
@@ -56,6 +58,8 @@
show("show3:%s", vsnprintf_sensitive(txt, sizeof(txt), hide, fmt, __VA_ARGS__)); \
} while(0)
+#undef show3
+#define show3(fmt, ...)
int main(void)
{
--
Nedko Arnaudov <GnuPG KeyID: 5D1B58ED>
Attachment:
pgpTI0dEnzzbk.pgp
Description: PGP signature
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|