チラシの裏の電子工作

電子工作、PC関係の備忘録というか、チラシの裏

ESP-WROOM-02 BASIC認証

ESP8266 ArduinoCore2.1.0から、BASIC認証がESP8266WebServerに実装されました。
が、動きません。
サンプル(HttpBasicAuth)のコンパイルは通るけど、認証を通した段階でException(2)でスタック吐いて止まる。
色んな意味で期待を裏切りません。
※2.3.0で修正された模様。

と言うわけで中身を調査。

ライブラリ本体はイカの場所に。
C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.1.0\libraries\ESP8266WebServer\src\ESP8266WebServer.cpp


bool ESP8266WebServer::authenticate(const char * username, const char * password)

この関数を抜けるときにほぼ必ず「Exception (2)」でこける。

コケ方がどうにも不可解で、107行目の

sprintf(toencode, "%s:%s", username, password);

を通ると必ずコケる。
どう考えても怪しいのはtoencode。
初期化はこうなっていた。

char toencodeLen = strlen(username)+strlen(password)+1;
char *toencode = new char[toencodeLen];

toencodeLenがなんでcharなのかっていうツッコミはおいといて…
username="hoge"、password="fuga"だとして、sprintfで出力されるのは"hoge:fuga"で9バイト。
toencodeLenも9になる。
あれ?sprintfって最後に\0が入るよな…って事は1バイト足らんじゃないの。

と言うわけで、96行目のtoencodeの初期化を1バイト増やす。

char *toencode = new char[toencodeLen+1];

動いた動いた。


スポンサーサイト

カテゴリ:電子工作

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://nax9800.blog.fc2.com/tb.php/118-c9efd2f4
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad