mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-22 12:39:42 +00:00
Handle invalid string length for hinting
This commit is contained in:
parent
88edc1a120
commit
3e20f36953
1 changed files with 16 additions and 4 deletions
|
@ -7,6 +7,8 @@
|
||||||
#include <QSplitter>
|
#include <QSplitter>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <components/debug/debuglog.hpp>
|
||||||
|
|
||||||
#include "../../model/doc/document.hpp"
|
#include "../../model/doc/document.hpp"
|
||||||
#include "../../model/world/universalid.hpp"
|
#include "../../model/world/universalid.hpp"
|
||||||
#include "../../model/world/data.hpp"
|
#include "../../model/world/data.hpp"
|
||||||
|
@ -210,18 +212,28 @@ void CSVWorld::ScriptSubView::useHint (const std::string& hint)
|
||||||
unsigned line = 0, column = 0;
|
unsigned line = 0, column = 0;
|
||||||
char c;
|
char c;
|
||||||
std::istringstream stream (hint.c_str()+1);
|
std::istringstream stream (hint.c_str()+1);
|
||||||
switch(hint[0]){
|
switch(hint[0])
|
||||||
|
{
|
||||||
case 'R':
|
case 'R':
|
||||||
case 'r':
|
case 'r':
|
||||||
{
|
{
|
||||||
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
||||||
QString source = mModel->data (index).toString();
|
QString source = mModel->data (index).toString();
|
||||||
|
unsigned stringSize = source.length();
|
||||||
unsigned pos, dummy;
|
unsigned pos, dummy;
|
||||||
if (!(stream >> c >> dummy >> pos) )
|
if (!(stream >> c >> dummy >> pos) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (unsigned i = 0; i <= pos; ++i){
|
if (pos > stringSize)
|
||||||
if (source[i] == '\n'){
|
{
|
||||||
|
Log(Debug::Warning) << "CSVWorld::ScriptSubView: requested position is higher than actual string length";
|
||||||
|
pos = stringSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i <= pos; ++i)
|
||||||
|
{
|
||||||
|
if (source[i] == '\n')
|
||||||
|
{
|
||||||
++line;
|
++line;
|
||||||
column = i+1;
|
column = i+1;
|
||||||
}
|
}
|
||||||
|
@ -231,7 +243,7 @@ void CSVWorld::ScriptSubView::useHint (const std::string& hint)
|
||||||
}
|
}
|
||||||
case 'l':
|
case 'l':
|
||||||
if (!(stream >> c >> line >> column))
|
if (!(stream >> c >> line >> column))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTextCursor cursor = mEditor->textCursor();
|
QTextCursor cursor = mEditor->textCursor();
|
||||||
|
|
Loading…
Reference in a new issue