fix windows vector<char> is empty, &buff[0] will crash

This commit is contained in:
jarodruan 2020-02-19 16:04:43 +08:00
parent 14c96fcc2b
commit 40ca80bfed
7 changed files with 157 additions and 159 deletions

View File

@ -38,7 +38,7 @@ int HttpImp::doRequest(TarsCurrentPtr current, vector<char> &buffer)
TC_HttpRequest request;
vector<char> v = current->getRequestBuffer();
string sBuf;
sBuf.assign(&v[0],v.size());
sBuf.assign(v.data(),v.size());
request.decode(sBuf);
TC_HttpResponse rsp;

View File

@ -90,14 +90,14 @@ int TestPushCallBack::onDispatch(ReqMessagePtr msg)
if(msg->request.sFuncName == "printResult")
{
string sRet;
sRet.assign(&(msg->response->sBuffer[0]), msg->response->sBuffer.size());
sRet.assign(msg->response->sBuffer.data(), msg->response->sBuffer.size());
printResult(msg->request.iRequestId, sRet);
return 0;
}
else if(msg->response->iRequestId == 0)
{
string sRet;
sRet.assign(&(msg->response->sBuffer[0]), msg->response->sBuffer.size());
sRet.assign(msg->response->sBuffer.data(), msg->response->sBuffer.size());
printPushInfo(sRet);
return 0;
}

View File

@ -923,7 +923,7 @@ void ServantHandle::handleNoTarsProtocol(const TarsCurrentPtr &current)
if (current->isResponse())
{
current->sendResponse((const char*)(&buffer[0]), buffer.size());
current->sendResponse((const char*)buffer.data(), buffer.size());
}
}

View File

@ -25,7 +25,7 @@ int DemoServantImp::doRequest(TarsCurrentPtr current, vector<char> &buffer)
// parse request header
vector<char> v = current->getRequestBuffer();
string sBuf;
sBuf.assign(&v[0], v.size());
sBuf.assign(v.data(), v.size());
req.decode(sBuf);
int ret = doRequest(req, rsp);

View File

@ -783,10 +783,8 @@ namespace tars
#ifndef GEN_PYTHON_MASK
//内存分配器
_reserve = [](BufferWriterString &os, size_t len) {
// os._buffer.reserve(len);
os._buffer.resize(len);
// cout << "_reserve:" << len << endl;
return os._buffer.data();
return (char*)os._buffer.data();
} ;
#endif
}

View File

@ -513,7 +513,7 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 1 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
/**
* Tencent is pleased to support the open source community by making Tars available.
*
@ -529,7 +529,7 @@ char *yytext;
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
#line 20 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 20 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
#include <map>
#include <string>
#include <sstream>
@ -742,7 +742,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
#line 67 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 67 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 749 "tars.lex.cpp"
@ -840,12 +840,12 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
#line 69 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 69 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{ BEGIN(INCL); }
YY_BREAK
case 2:
YY_RULE_SETUP
#line 71 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 71 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
if ( include_file_stack_ptr >= MAX_INCLUDE_DEPTH )
{
@ -878,7 +878,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(INCL):
#line 101 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 101 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
--include_file_stack_ptr;
if ( include_file_stack_ptr < 0 )
@ -897,14 +897,14 @@ case YY_STATE_EOF(INCL):
YY_BREAK
case 3:
YY_RULE_SETUP
#line 117 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 117 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
return TARS_SCOPE_DELIMITER;
}
YY_BREAK
case 4:
YY_RULE_SETUP
#line 121 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 121 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
// C++ comment
bool e = false;
@ -925,7 +925,7 @@ YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
#line 139 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 139 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
// C comment
bool e = false;
@ -976,7 +976,7 @@ YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
#line 187 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 187 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
StringGrammarPtr ident = new StringGrammar;
ident->v = yytext;
@ -987,7 +987,7 @@ YY_RULE_SETUP
case 7:
/* rule 7 can match eol */
YY_RULE_SETUP
#line 194 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 194 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
StringGrammarPtr ident = new StringGrammar;
ident->v = yytext;
@ -1000,7 +1000,7 @@ YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
#line 204 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 204 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
StringGrammarPtr str = new StringGrammar;
bool e = false;
@ -1115,7 +1115,7 @@ YY_RULE_SETUP
YY_BREAK
case 9:
YY_RULE_SETUP
#line 316 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 316 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
errno = 0;
IntergerGrammarPtr ptr = new IntergerGrammar;
@ -1140,7 +1140,7 @@ YY_RULE_SETUP
YY_BREAK
case 10:
YY_RULE_SETUP
#line 338 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 338 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
errno = 0;
FloatGrammarPtr ptr = new FloatGrammar;
@ -1175,7 +1175,7 @@ YY_RULE_SETUP
case 11:
/* rule 11 can match eol */
YY_RULE_SETUP
#line 369 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 369 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
if(yytext[0] == '\n')
{
@ -1185,7 +1185,7 @@ YY_RULE_SETUP
YY_BREAK
case 12:
YY_RULE_SETUP
#line 376 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 376 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
{
if(yytext[0] < 32 || yytext[0] > 126)
{
@ -1204,7 +1204,7 @@ YY_RULE_SETUP
YY_BREAK
case 13:
YY_RULE_SETUP
#line 392 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 392 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"
ECHO;
YY_BREAK
#line 1211 "tars.lex.cpp"
@ -2214,7 +2214,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
#line 392 "/Users/jarod/centos/TarsCpp/tools/tarsgrammar/tars.l"
#line 392 "/Volumes/MyData/centos/TarsCpp/tools/tarsgrammar/tars.l"

File diff suppressed because it is too large Load Diff