Commit 8728fc6c authored by jan.koester's avatar jan.koester
Browse files

repair formdata

parent e85d96b9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -78,7 +78,8 @@ private:
                        condat << "Key: "
                               << curdispo->getKey()
                               << " Value: "
                               << curdispo->getValue();
                               << curdispo->getValue()
                               << " ";
                }
                condat << "<br>";
                if (!curformdat->Value.empty()){
+22 −10
Original line number Diff line number Diff line
@@ -899,12 +899,17 @@ void libhttppp::HttpForm::_parseMulitpart(const netplus::condata<char> &data){
        }
    }
}

#include<iostream>
void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t start, size_t end){

  size_t findel=data.search("\r\n\r\n",start);
  size_t findel=data.search("\r\n\r\n",start),findelsize=4;

  if(findel==std::string::npos){
      findel=data.search("\n\n",start);
      findelsize=2;
  }

  if(++findel==std::string::npos)
  if(findel==std::string::npos)
    return;

  size_t ctl=std::string::npos,ctlt=std::string::npos;
@@ -925,7 +930,7 @@ void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t
          ctlt=scl;
      }

      if(data[scl]=='\r' && ctl!=std::string::npos && ctlt!=std::string::npos){
      if(ctl!=std::string::npos && ctlt!=std::string::npos){
              MultipartForm::Data::Content content;
              std::copy(data.begin()+ctl,data.begin()+ctlt,
                            std::inserter<std::vector<char>>(content._Key,content._Key.begin()));
@@ -939,7 +944,7 @@ void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t

              while(data[++ctlt]==' ');

              std::copy(data.begin()+ctlt,data.begin()+scl,
              std::copy(data.begin()+ctlt,data.begin()+findel,
                            std::inserter<std::vector<char>>(content._Value,content._Value.begin()));

              content._Value.push_back('\0');
@@ -959,12 +964,12 @@ void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t
    }
  }

  auto searchElement=[](int startpos,size_t size,const char* word,std::vector<char> &sdata){
  auto searchLastElement=[](int startpos,size_t size,const char* word,std::vector<char> &sdata){
    size_t wsize=strlen(word);
    for(size_t i=startpos; i<size; ++i){
      for(size_t ii=0; ii<=wsize; ++ii){
        if(ii==wsize){
          return i-wsize;
          return i;
        }
        if(sdata.at(i)==word[ii]){
          ++i;
@@ -977,8 +982,12 @@ void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t
  };

  if(cdispo){
    size_t ifdp= searchLastElement(0,cdispo->_Value.size(),"form-data",cdispo->_Value);

    std::cout << ifdp << std::endl;

    if(ifdp!=std::string::npos){

    size_t ifdp= searchElement(0,cdispo->_Value.size(),"form-data",cdispo->_Value);

      size_t scss=std::string::npos,scse=std::string::npos;

@@ -1039,8 +1048,11 @@ void libhttppp::HttpForm::_parseMultiSection(netplus::condata<char> &data,size_t
        }

      }
    }
    --end;

    if(MultipartFormData._lastData)
          std::copy(data.begin()+(findel+3),data.begin()+end,std::inserter<std::vector<char>>(MultipartFormData._lastData->Value,
      std::copy(data.begin()+(findel+findelsize),data.begin()+end,std::inserter<std::vector<char>>(MultipartFormData._lastData->Value,
                                                                                          MultipartFormData._lastData->Value.begin()));
  }