View Issue Details

IDProjectCategoryView StatusLast Update
0002781SAS.ПланетаБаг / Bugpublic04-08-2015 07:29
ReporterGunSmoker Assigned ToGunSmoker  
PrioritynormalSeverityminorReproducibilitysometimes
Status resolvedResolutionfixed 
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 Files
Безымянный.png (172,709 bytes)   
Безымянный.png (172,709 bytes)   

Relationships

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

Activities

GunSmoker

03-08-2015 19:38

developer   ~0016279

Зачем там нетривиальное копирование массива вариантов? Не проще ли будет сразу делать Format? Производительность?

GunSmoker

03-08-2015 19:51

developer   ~0016280

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

vdemidov

03-08-2015 20:00

manager   ~0016281

Это значит, что эта ошибка проявляется только на юникодной версии делфи. Раньше vtUnicodeString вообще не существовало.

vdemidov

03-08-2015 20:01

manager   ~0016282

Нужно допиливать CopyVarRec

vdemidov

03-08-2015 20:03

manager   ~0016283

Сейчас действительно проще было бы сразу сделать формат. Но не хочется делать форматирование и локализацию строки, которая теоретически вообще не понадобиться. Есть еще хотелки 0001339 и 0001918

GunSmoker

03-08-2015 20:45

developer   ~0016284

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

vdemidov

03-08-2015 20:50

manager   ~0016285

Ага. Только пользуйся ребейзом и не делай ненужных мержей.

GunSmoker

03-08-2015 21:20

developer   ~0016286

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

А что за клиент вы используете для Windows? Я попробовал TortoiseHG - там есть Merge, а Rebase - только как дополнение.

vdemidov

03-08-2015 21:23

manager   ~0016287

TortoiseHG
Rebase именно дополнение, но оно штатное и поддерживается TortoiseHG.
В простейшем варианте просто откат на нужную ревизию, а потом обновление файлов и новый коммит. А старый просто закрываете ветку. Делать новый клон репозитория необязательно. Загляните как Garl делает. Он у нас самый опытный по подготовке пул-реквестов.

GunSmoker

03-08-2015 21:26

developer   ~0016288

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

Конкретно сейчас мне проще новый форк сделать, чем разбираться с тем, что я натворил :)

GunSmoker

03-08-2015 21:32

developer   ~0016290

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

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
08-08-2025 13:22 zed Category Баг => Баг / Bug