SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002781SAS.Планета[All Projects] Багpublic03-08-2015 19:3604-08-2015 07:29
ReporterGunSmoker 
Assigned ToGunSmoker 
PrioritynormalSeverityminorReproducibilitysometimes
StatusresolvedResolutionfixed 
PlatformWindowsOS8.1OS Versionx64
Product Version141212 
Target Version150915Fixed in Version150915 
Summary0002781: 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
TagsNo tags attached.
Attached Filespng file icon Безымянный.png [^] (172,709 bytes) 03-08-2015 19:36

- Relationships
child of 0002166resolvedzed Переход на версию Delphi с полной поддержкой юникода 

-  Notes
(0016279)
GunSmoker (developer)
03-08-2015 19:38

Зачем там нетривиальное копирование массива вариантов? Не проще ли будет сразу делать Format? Производительность?
(0016280)
GunSmoker (developer)
03-08-2015 19:51

Ага, причина вылета: в AErrorTextArgs сидит Item.VType = vtUnicodeString, который игнорируется CopyVarRec (вернее, копируется "как есть", без выделения памяти аналогично vtString, vtAnsiString, vtPChar, vtPWideChar и vtWideString). Соответственно, если исходное исключение (сообщение об ошибке) уже было удалено в момент вызова TDownloadResultError.GetErrorText, то указатели из копии FErrorTextArgs указывают в космос. Есть шанс что это сработает, если память от сообщения об ошибке ещё не была перезаписана.
(0016281)
vdemidov (manager)
03-08-2015 20:00

Это значит, что эта ошибка проявляется только на юникодной версии делфи. Раньше vtUnicodeString вообще не существовало.
(0016282)
vdemidov (manager)
03-08-2015 20:01

Нужно допиливать CopyVarRec
(0016283)
vdemidov (manager)
03-08-2015 20:03

Сейчас действительно проще было бы сразу сделать формат. Но не хочется делать форматирование и локализацию строки, которая теоретически вообще не понадобиться. Есть еще хотелки 0001339 и 0001918
(0016284)
GunSmoker (developer)
03-08-2015 20:45

https://bitbucket.org/sas_team/sas.planet.src/pull-requests/351/fixed-2781-unicodestring/diff
(0016285)
vdemidov (manager)
03-08-2015 20:50

Ага. Только пользуйся ребейзом и не делай ненужных мержей.
(0016286)
GunSmoker (developer)
03-08-2015 21:20

Окей, в следующий раз.

А что за клиент вы используете для Windows? Я попробовал TortoiseHG - там есть Merge, а Rebase - только как дополнение.
(0016287)
vdemidov (manager)
03-08-2015 21:23

TortoiseHG
Rebase именно дополнение, но оно штатное и поддерживается TortoiseHG.
В простейшем варианте просто откат на нужную ревизию, а потом обновление файлов и новый коммит. А старый просто закрываете ветку. Делать новый клон репозитория необязательно. Загляните как Garl делает. Он у нас самый опытный по подготовке пул-реквестов.
(0016288)
GunSmoker (developer)
03-08-2015 21:26

...а где это посмотреть?

Конкретно сейчас мне проще новый форк сделать, чем разбираться с тем, что я натворил :)
(0016290)
GunSmoker (developer)
03-08-2015 21:32

https://bitbucket.org/sas_team/sas.planet.src/pull-requests/352/fixed-2781/diff

- Users who viewed this issue
User List Anonymous (3029x), vdemidov (25x), GunSmoker (22x), zed (3x), vasketsov (1x)
Total Views 3080
Last View 21-11-2024 12:56

- 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



Copyright © 2007 - 2024 SAS.Planet Team