Hallo pl,

mem = (char*)malloc(content_length); fread(mem,content_length,1,stdin); if( offs = strstr(mem, "\r\n")){

Mein C ist ziemlich eingerostet und wird heutzutage einen Halbton höher gespielt (C#). Aber ich denke, dass dies ein Bug ist, der darauf wartet zu passieren. Du allocierst den Buffer und füllst ihn mittels fread. Ich würde sagen: dadurch wird er nicht Nullterminiert.

Und das heißt: wenn kein \r\n im Buffer ist, läufst Du in den Wald.

mem = (char*)malloc(content_length+1); fread(mem,content_length,1,stdin); mem[content_length] = 0; if( offs = strstr(mem, "\r\n")){

Update: Beim malloc für den header gilt das Gleiche. Nach meiner Meinung brauchst Du da aber nicht unbedingt einen malloc, weil du den kopierten Bereich nicht veränderst. Du KÖNNTEST ihn aber verändern, indem Du zunächst mal alle \n durch \0 ersetzt.

Egal ob du das tust oder nicht, würde ich Dir eine Funktion empfehlen, die eine Headerzeile parsed. Du übergibst ihr den Pointer auf den Beginn des Headerbereichs sowie einen Zeiger auf eine Struktur, die einen Header-Descriptor bildet. Das sind im einfachsten Fall zwei char* - dann muss die Funktion aber den Doppelpunkt und das \r\n am Ende der Headerzeile durch \0 ersetzen. Oder Du fügst die Längen als weitere Attribute in die Struktur ein. Die Rückgabe dieser Funktion wäre ein Pointer auf den Beginn der nächsten Headerzeile oder NULL, wenn kein Header mehr kommt (d.h. wenn Du sie mit einem Pointer auf \r\n aufrufst).

struct headerInfo { int nameLen; char* name; int valueLen; char* value; }

Auf diese Weise hast Du schon mal die technische Interpretation der Headerstruktur und die fachliche Verarbeitung der Headerwerte getrennt.

Rolf

-- sumpsi - posui - clusi

Folgende Nachrichten verweisen auf diesen Beitrag:

freiwillige Angabe, für jeden sichtbar
freiwillige Angabe, für jeden sichtbar
freiwillige Angabe, für jeden sichtbar

Vorschau (Nachricht wird im Forum „SELF-Forum“ erscheinen)

  • Keine Tag-Vorschläge verfügbar
  • keine Tags vergeben

abbrechen

068

c binary mode für stdin

  1. 0
    1. 0
    2. 0
      1. 0
        1. 0
          1. 0
        2. 0
          1. 0
            1. 0
              1. 0
                1. 0
      2. 0

        multipart/form-data

        1. 0
          1. 0
            1. 0
            2. 0
              1. 0
                1. 0
        2. 0
        3. 0
          1. 0
            1. 0
              1. 0
          2. 0
            1. 0
              1. 0
              2. 0
                1. 0
                  1. 0
                2. 0
                  1. 0
                    1. 0
                      1. 0
                        1. 0
                          1. -1
                            1. 0
                        2. 0
                3. 2
                  1. 0
                  2. 0
                  3. 0
                    1. 0
                      1. 0
                        1. 0
                        2. 2
                          1. 1
                            1. 0
                    2. 0
                      1. 0
                4. 0
  2. 0

    C Upload goßer Datenmengen

    1. 0
      1. 0
        1. 0
          1. 0
            1. 0
              1. 0
              2. 0

                Bug in PHP PHP/5.3.0 Upload

                1. 0
                  1. 0
                    1. 0
                      1. 0
                        1. 0
            2. 0
            3. 0
    2. 2
      1. 4