View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002781 | SAS.Планета | Баг / Bug | 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. | ||||
| Attached Files | |||||
|
|
Зачем там нетривиальное копирование массива вариантов? Не проще ли будет сразу делать 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 |
| 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 |