Mailinglist Archive: opensuse-de (6551 mails)
| < Previous | Next > |
Re: Was ist eine gueltige Message-ID?
- From: Jan.Trippler@xxxxxxxxxxx (Jan Trippler)
- Date: Sat, 3 Aug 2002 20:37:26 +0200
- Message-id: <20020803203726.A21493@xxxxxxxxxxxxxx>
On Sam, 03 Aug 2002 at 20:09 (+0200), Thorsten Haude wrote:
Siehe unten. Du drehst mir das Wort im Mund rum. versuch[6] ist ein
char-Array. Natürlich kannst Du solche char-Arrays - wenn Du es
möchtest - ohne 0-Terminierung anlegen (wenn es z. B. für Flags
genutzt wird, ist das auch nicht nötig), aber wenn Du _irgendeine_
Stringfunktion drauf loslassen willst, dann _muss_ am Ende eine 0
stehen. Ich habe Dir in meiner anderen Mail ein Code-Beispiel
gebracht, das zeigt, wie auch strncmp Unsinn bauen würde, wenn die
0 als String-Ende nicht beachtet wird.
Die Haarespalterei machst Du hier. Du behauptest seit Tagen, strcmp
liest über die 0 hinweg und das ist Stuss. Du behauptest seit Tagen,
dass die Benutzung von strcmp eine Sicherheitslücke ist und das ist
Stuss (es sei denn, Du sorgst in Deinen Programmen nicht dafür, dass
Strings nullterminiert sind - dann kriegst Du Probleme mit _allen_
Stringfunktionen, selbst die Längenbestimmung mittels strlen raucht
dann ab, und strncmp kann in solchen Fällen totalen Schrott liefern
- siehe mein Beispiel in der anderen Mail). *Diese ganze unsichere
C-Eigenheit* ist dann und nur dann unsicher, wenn sich der
Programmierer eben nicht um eine saubere Null-Terminierung
(innerhalb der definierten Grenzen des char-Arrays) kümmert.
Den Satz in Klammern verstehe ich nicht - vor allem nicht, was er
hier soll. Nebenbei: Ich entwickele seit einer Reihe von Jahren
Programme u. a. in C für diverse Unix-Derivate (Reliant Unix, HP-UX,
AIX, Solaris und vereinzelt SCO waren schon dabei), in keinem
einzigen Fall hat der strcmp anders als in der glibc funktionert
(intern vielleicht, aber er hat _immer_ bei 0 aufgehört).
Wieder einmal: Wenn Du zitierst, dann bitte korrekt. So langsam
werde ich sauer. O-Ton Jan:
... Ein String (der als Datentyp in C übrigens nicht existiert) ...
Ich habe also mitnichten behauptet, dass Strings nicht existieren,
sondern dass sie _als Datentyp_ nicht existieren. Das ist ein
himmelweiter Unterschied. Wie Strings in C abgebildet werden, hatte
ich im gleichen Satz erklärt.
Das "s. o." bezog sich auf die Nullterminierung, was jedem halbwegs
aufmerksamen Leser wohl auch sofort aufgefallen wäre.
Jan
Moin,
* Jan Trippler <Jan.Trippler@xxxxxxxxxxx> [02-08-03 16:53]:
On Sam, 03 Aug 2002 at 00:18 (+0200), Thorsten Haude wrote:
Daß es in der glibc so funktioniert, habe ich schon im Sourcecode
nachgesehen.
Ja, und nu?
Nicht alle Systeme laufen mit der glibc.
Ein String wird in C _immer_ nullterminiert! Es gibt keine Ausnahmen,char versuch[6] = {'k', 'a', 'p', 'u', 't', 't'};
ein String ist bei 0 zu Ende. Zeige mir _ein_ Beispiel, in dem das
nicht so ist.
Ein nicht terminierter String, der in jedem Programm Stress machen
wird. Das was Du da fabriziert hast, ist einfach nur ein char-Array.
Ein String (der als Datentyp in C übrigens nicht existiert) ist ein
Null-terminiertes char-Array.
Ja was denn nun? Ein nicht terinierter String, der nicht existiert?
Siehe unten. Du drehst mir das Wort im Mund rum. versuch[6] ist ein
char-Array. Natürlich kannst Du solche char-Arrays - wenn Du es
möchtest - ohne 0-Terminierung anlegen (wenn es z. B. für Flags
genutzt wird, ist das auch nicht nötig), aber wenn Du _irgendeine_
Stringfunktion drauf loslassen willst, dann _muss_ am Ende eine 0
stehen. Ich habe Dir in meiner anderen Mail ein Code-Beispiel
gebracht, das zeigt, wie auch strncmp Unsinn bauen würde, wenn die
0 als String-Ende nicht beachtet wird.
Es geht doch nur darum, daß diese ganze C-Eigenheit mit dem
Zeiger-auf-Chararacter offensichtlich und bekannterweise nicht
wasserdicht ist. Darum sollte man bei ihrer Benutzung keine Haare
spalten, sondern auf Nummer sicher gehen.
Die Haarespalterei machst Du hier. Du behauptest seit Tagen, strcmp
liest über die 0 hinweg und das ist Stuss. Du behauptest seit Tagen,
dass die Benutzung von strcmp eine Sicherheitslücke ist und das ist
Stuss (es sei denn, Du sorgst in Deinen Programmen nicht dafür, dass
Strings nullterminiert sind - dann kriegst Du Probleme mit _allen_
Stringfunktionen, selbst die Längenbestimmung mittels strlen raucht
dann ab, und strncmp kann in solchen Fällen totalen Schrott liefern
- siehe mein Beispiel in der anderen Mail). *Diese ganze unsichere
C-Eigenheit* ist dann und nur dann unsicher, wenn sich der
Programmierer eben nicht um eine saubere Null-Terminierung
(innerhalb der definierten Grenzen des char-Arrays) kümmert.
Bernds Aussage ist keine Vermutung, sondern Tatsache. Hol Dir die
Sourcen, schau nach, baue Testprogramme, ...
Das würde alles nur Aussagen über die glibc erlauben.
Aha, die ist Dir nicht autoritativ genug. Jetzt kenne ich endlich
Dein eigentliches Problem: Der Papst muss die 0 am Ende absegnen ;-)
Tja, das Programm, an dem ich fast ausschließlich arbeite läuft zum
Glück nicht nur auf Linux. (Es existiert sogar ein FAQ-Eintrag wegen
einer angeblichen Sicherheitslücke, die von der glibc gemeldet wird,
aber nicht existiert.)
Den Satz in Klammern verstehe ich nicht - vor allem nicht, was er
hier soll. Nebenbei: Ich entwickele seit einer Reihe von Jahren
Programme u. a. in C für diverse Unix-Derivate (Reliant Unix, HP-UX,
AIX, Solaris und vereinzelt SCO waren schon dabei), in keinem
einzigen Fall hat der strcmp anders als in der glibc funktionert
(intern vielleicht, aber er hat _immer_ bei 0 aufgehört).
[...]
P.S.: Du stellst einen Sachverhalt in Frage, der die Grundlage für
das gesamte Stringhandling in C bildet.
Bitte? Welcher wäre das wohl?
s. o.
"Strings existierern nicht"? Das würde allerdings das gesamte
Stringhandling beeinflussen.
Wieder einmal: Wenn Du zitierst, dann bitte korrekt. So langsam
werde ich sauer. O-Ton Jan:
... Ein String (der als Datentyp in C übrigens nicht existiert) ...
Ich habe also mitnichten behauptet, dass Strings nicht existieren,
sondern dass sie _als Datentyp_ nicht existieren. Das ist ein
himmelweiter Unterschied. Wie Strings in C abgebildet werden, hatte
ich im gleichen Satz erklärt.
Das "s. o." bezog sich auf die Nullterminierung, was jedem halbwegs
aufmerksamen Leser wohl auch sofort aufgefallen wäre.
Jan
| < Previous | Next > |