SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0002781 | SAS.Планета | [All Projects] Баг | public | 03-08-2015 19:36 | 04-08-2015 07:29 |
|
Reporter | GunSmoker | |
Assigned To | GunSmoker | |
Priority | normal | Severity | minor | Reproducibility | sometimes |
Status | resolved | Resolution | fixed | |
Platform | Windows | OS | 8.1 | OS Version | x64 |
Product Version | 141212 | |
Target Version | 150915 | Fixed in Version | 150915 | |
|
Summary | 0002781: Access Violation в TDownloadResultError.GetErrorText в юникодной версии |
Description | Иногда FErrorTextArgs содержит мусор вместо актуальных данных, что приводит к возбуждению EAccessViolation внутри SysUtils.Format, вызываемой из u_DownloadResult.TDownloadResultError.GetErrorText. При этом AErrorTextArgs для этого экземпляра TDownloadResultError были валидными в момент вызова конструктора. |
Steps To Reproduce | Не уверен, проявляется редко. Часто всего всё проходит нормально: либо FErrorTextArgs оказывается валиден, либо мусор в FErrorTextArgs успешно читается SysUtils.Format и копируется в Result (в результате чего в Result - мусор, обычно - японско-китайские иероглифы).
В любом случае это исключение где-то гасится и не всплывает до UI. |
Additional Information | Пример стека:
:75cb0192 KERNELBASE.RaiseException + 0x49
:0040769c NotifyNonDelphiException + $1C
:77e12bd3 ntdll.RtlRaiseStatus + 0x86
SysUtils.WideFormatBuf(???,???,???,2,(...),$CD9898)
SysUtils.FormatBuf(???,???,???,2,(...),$CD9898)
SysUtils.FmtStr(???,'%s',(...),$CD9898)
SysUtils.Format(???,???,$CD9898)
SysUtils.Format(???,???)
u_DownloadResult.TDownloadResultError.GetErrorText
u_TileRequestResult.TTileRequestResultDownloadError.Create(???)
u_TileDownloaderSimple.TTileDownloaderSimple.Download(TNotifierOneOperationByNotifier($7FC7CC98) as INotifierOneOperation,TNotifierOperation($797FF428) as INotifierOperation,0,TTileRequest($73C69A20) as ITileRequest)
u_TileRequestQueueProcessorThread.TTileRequestQueueProcessorThread.Execute
u_InterfacedThread.TThread4InterfacedThread.Execute |
Tags | No tags attached. |
Relationships | child of | 0002166 | resolved | zed | Переход на версию Delphi с полной поддержкой юникода |
|
Attached Files | Безымянный.png (172,709) 03-08-2015 19:36 http://www.sasgis.org/mantis/file_download.php?file_id=1916&type=bug
|
|
Issue History |
Date Modified | Username | Field | Change |
03-08-2015 19:36 | GunSmoker | New Issue | |
03-08-2015 19:36 | GunSmoker | File Added: Безымянный.png | |
03-08-2015 19:38 | GunSmoker | Note Added: 0016279 | |
03-08-2015 19:51 | GunSmoker | Note Added: 0016280 | |
03-08-2015 20:00 | vdemidov | Note Added: 0016281 | |
03-08-2015 20:01 | vdemidov | Note Added: 0016282 | |
03-08-2015 20:03 | vdemidov | Note Added: 0016283 | |
03-08-2015 20:04 | vdemidov | Summary | Access Violation в TDownloadResultError.GetErrorText => Access Violation в TDownloadResultError.GetErrorText в юникодной версии |
03-08-2015 20:04 | GunSmoker | Relationship added | related to 0002166 |
03-08-2015 20:06 | vdemidov | Relationship replaced | child of 0002166 |
03-08-2015 20:06 | vdemidov | Status | new => confirmed |
03-08-2015 20:06 | vdemidov | Product Version | .Nightly => 141212 |
03-08-2015 20:06 | vdemidov | Target Version | => 150915 |
03-08-2015 20:19 | GunSmoker | Assigned To | => GunSmoker |
03-08-2015 20:19 | GunSmoker | Status | confirmed => assigned |
03-08-2015 20:45 | GunSmoker | Note Added: 0016284 | |
03-08-2015 20:50 | vdemidov | Note Added: 0016285 | |
03-08-2015 21:20 | GunSmoker | Note Added: 0016286 | |
03-08-2015 21:23 | vdemidov | Note Added: 0016287 | |
03-08-2015 21:26 | GunSmoker | Note Added: 0016288 | |
03-08-2015 21:32 | GunSmoker | Note Added: 0016290 | |
04-08-2015 07:29 | vdemidov | Status | assigned => resolved |
04-08-2015 07:29 | vdemidov | Fixed in Version | => 150915 |
04-08-2015 07:29 | vdemidov | Resolution | open => fixed |
Notes |
|
|
Зачем там нетривиальное копирование массива вариантов? Не проще ли будет сразу делать Format? Производительность? |
|
|
|
Ага, причина вылета: в AErrorTextArgs сидит Item.VType = vtUnicodeString, который игнорируется CopyVarRec (вернее, копируется "как есть", без выделения памяти аналогично vtString, vtAnsiString, vtPChar, vtPWideChar и vtWideString). Соответственно, если исходное исключение (сообщение об ошибке) уже было удалено в момент вызова TDownloadResultError.GetErrorText, то указатели из копии FErrorTextArgs указывают в космос. Есть шанс что это сработает, если память от сообщения об ошибке ещё не была перезаписана. |
|
|
|
Это значит, что эта ошибка проявляется только на юникодной версии делфи. Раньше vtUnicodeString вообще не существовало. |
|
|
|
Нужно допиливать CopyVarRec |
|
|
|
Сейчас действительно проще было бы сразу сделать формат. Но не хочется делать форматирование и локализацию строки, которая теоретически вообще не понадобиться. Есть еще хотелки 0001339 и 0001918 |
|
|
|
https://bitbucket.org/sas_team/sas.planet.src/pull-requests/351/fixed-2781-unicodestring/diff |
|
|
|
Ага. Только пользуйся ребейзом и не делай ненужных мержей. |
|
|
|
Окей, в следующий раз.
А что за клиент вы используете для Windows? Я попробовал TortoiseHG - там есть Merge, а Rebase - только как дополнение. |
|
|
|
TortoiseHG
Rebase именно дополнение, но оно штатное и поддерживается TortoiseHG.
В простейшем варианте просто откат на нужную ревизию, а потом обновление файлов и новый коммит. А старый просто закрываете ветку. Делать новый клон репозитория необязательно. Загляните как Garl делает. Он у нас самый опытный по подготовке пул-реквестов. |
|
|
|
...а где это посмотреть?
Конкретно сейчас мне проще новый форк сделать, чем разбираться с тем, что я натворил :) |
|
|
|
https://bitbucket.org/sas_team/sas.planet.src/pull-requests/352/fixed-2781/diff |
|