Skip to content

StreamHttpsClient.ino crashes #5216

Closed
Closed
@Jeroen88

Description

@Jeroen88

Basic Infos

  • This issue complies with the issue POLICY doc.
  • I have read the documentation at readthedocs and the issue is not addressed there.
  • I have tested that the issue is present in current master branch (aka latest git).
  • I have searched the issue tracker for a similar issue.
  • If there is a stack dump, I have decoded it.
  • I have filled out all fields below.

Platform

  • Hardware: NodeMCU
  • Core Version: git pull upstream HEAD
  • Development Env: Arduino IDE
  • Operating System: Ubuntu

Settings in IDE

  • Module: Generic ESP8266 Module
  • Flash Mode: qio
  • Flash Size: 4MB/1MB
  • lwip Variant: v2 Lower Memory
  • Reset Method: ck
  • Flash Frequency: 80Mhz
  • CPU Frequency: 160MHz
  • Upload Using: SERIAL
  • Upload Speed: 230400 (serial upload only)

Problem Description

Running StreamHttpsClient.ino crashes. Remarkable is that when I enable Debug Level: SSL+HTTP_CLIENT it runs fine. @earlephilhower as requested!

MCVE Sketch

   StreamHTTPClient.ino

    Created on: 24.05.2015

*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("SSID", "PASSWORD");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    HTTPClient http;

    BearSSL::WiFiClientSecure *client = new BearSSL::WiFiClientSecure ;

    bool mfln = client->probeMaxFragmentLength("tls.mbed.org", 443, 1024);
    Serial.printf("\nConnecting to https://tls.mbed.org\n");
    Serial.printf("Maximum fragment Length negotiation supported: %s\n", mfln ? "yes" : "no");
    if (mfln) {
      client->setBufferSizes(1024, 1024);
    }

    Serial.print("[HTTPS] begin...\n");

    // configure server and url
    const uint8_t fingerprint[20] = {0xEB, 0xD9, 0xDF, 0x37, 0xC2, 0xCC, 0x84, 0x89, 0x00, 0xA0, 0x58, 0x52, 0x24, 0x04, 0xE4, 0x37, 0x3E, 0x2B, 0xF1, 0x41};
    client->setFingerprint(fingerprint);

    if (http.begin(*client, "https://tls.mbed.org/")) {

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK) {

          // get lenght of document (is -1 when Server sends no Content-Length header)
          int len = http.getSize();

          // create buffer for read
          static uint8_t buff[128] = { 0 };

          // get tcp stream
          WiFiClient * stream = client;

          // read all data from server
          while (http.connected() && (len > 0 || len == -1)) {
            // get available data size
            size_t size = stream->available();

            if (size) {
              // read up to 128 byte
              int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));

              // write it to Serial
              Serial.write(buff, c);

              if (len > 0) {
                len -= c;
              }
            }
            delay(1);
          }

          Serial.println();
          Serial.print("[HTTPS] connection closed or file end.\n");

        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("Unable to connect\n");
    }

    delete client;
  }

  delay(10000);
}

#include <Arduino.h>

void setup() {

}

void loop() {

}

Debug Messages

09:39:40.098 -> [HTTPS] connection closed or file end.
09:39:40.099 -> 
09:39:40.099 -> Exception (9):
09:39:40.099 -> epc1=0x40206c19 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000137 depc=0x00000000
09:39:40.100 -> 
09:39:40.101 -> ctx: cont 
09:39:40.101 -> sp: 3ffffcd0 end: 3fffffc0 offset: 01a0
09:39:40.102 -> 
09:39:40.103 -> >>>stack>>>
09:39:40.103 -> 3ffffe70:  3fff29ac 3fff1644 3fff007c 40208540  
09:39:40.104 -> 3ffffe80:  ffffffff 00000000 3ffef188 402049b8  
09:39:40.104 -> 3ffffe90:  3ffef2f0 0000013b 0000013b 40100538  
09:39:40.129 -> 3ffffea0:  ffffffff 3ffef1ac 3fff0204 40100a04  
09:39:40.130 -> 3ffffeb0:  00000000 00000000 3ffffee0 40207ee8  
09:39:40.131 -> 3ffffec0:  402015e2 3ffef1ac 3fff0204 40204c14  
09:39:40.131 -> 3ffffed0:  ffffffff 3ffef1ac 3fff0204 402028db  
09:39:40.132 -> 3ffffee0:  00000000 00000000 3fff0204 3ffeff84  
09:39:40.163 -> 3ffffef0:  0000000f 0000000c fe0001bb 40001388  
09:39:40.164 -> 3fffff00:  3ffeff9c 0000000f 00000001 3ffeffb4  
09:39:40.165 -> 3fffff10:  0000000f 00000005 3fff000c 0000000f  
09:39:40.167 -> 3fffff20:  00000000 3fff0024 0000001f 00000011  
09:39:40.168 -> 3fffff30:  3fff004c 0000000f 00000000 00000000  
09:39:40.196 -> 3fffff40:  00000000 00000000 ffffffff 4020a600  
09:39:40.197 -> 3fffff50:  00000000 00000000 37dfd9eb 8984ccc2  
09:39:40.198 -> 3fffff60:  5258a000 37e40424 41f12b3e 00000000  
09:39:40.199 -> 3fffff70:  00000000 00000000 40208104 3fffefa0  
09:39:40.200 -> 3fffff80:  00000008 00000000 3ffef1ac 40202f90  
09:39:40.229 -> 3fffff90:  3fffdad0 00000000 3ffef1ac 3ffef278  
09:39:40.230 -> 3fffffa0:  3fffdad0 00000000 3ffef270 40208190  
09:39:40.231 -> 3fffffb0:  feefeffe feefeffe 3ffe8504 40100a61  
09:39:40.232 -> <<<stack<<<
09:39:40.261 -> 
09:39:40.262 ->  ets Jan  8 2013,rst cause:2, boot mode:(1,6)
09:39:40.262 -> 
09:39:48.327 -> 
09:39:48.328 ->  ets Jan  8 2013,rst cause:4, boot mode:(1,6)
09:39:48.328 -> 
09:39:48.329 -> wdt reset

Exception decoder


Decoding stack results
0x40208540: std::__shared_count(__gnu_cxx::_Lock_policy)0>::~__shared_count() at /home/jeroen/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/bits/shared_ptr_base.h line 547
0x402049b8: std::__shared_ptr ::operator=(std::__shared_ptr &&) at /home/jeroen/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/bits/shared_ptr_base.h line 862
0x40100538: _umm_free at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/umm_malloc/umm_malloc.c line 1299
0x40100a04: free at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/umm_malloc/umm_malloc.c line 1759
0x40207ee8: operator delete(void*) at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/abi.cpp line 54
0x402015e2: delay at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_wiring.c line 54
0x40204c14: BearSSL::WiFiClientSecure::~WiFiClientSecure() at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp line 123
0x402028db: loop() at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino line 114
0x40208104: esp_yield() at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_main.cpp line 91
0x40202f90: ESP8266WiFiMulti::addAP(char const*, char const*) at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp line 39
0x40208190: loop_wrapper() at /home/jeroen/Downloads/arduino-PR-beta1.9-BUILD-69/hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_main.cpp line 125

Metadata

Metadata

Labels

type: bugwaiting for feedbackWaiting on additional info. If it's not received, the issue may be closed.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions