1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-21 00:19:29 +02:00
Commit Graph

9319 Commits

Author SHA1 Message Date
6f0864b47c Feature: Town Negative Bonuses. Fix: Negative bonus bearers should not be affected 2021-09-04 14:15:37 +03:00
3cb88b6964 Feature: Magic Well should work in the fan towns 2021-09-04 14:15:37 +03:00
093076c6d0 Workaround msvc crash 2021-08-24 14:25:57 +03:00
d56760eb4b Workaround msvc compiler crash 2021-08-24 12:19:18 +03:00
83f690e059 change SDL color key alpha to transparent 2021-08-21 09:32:52 +03:00
27b3a88dda Replace App Veyor 2021-08-21 09:32:52 +03:00
cd10be875d [macOS] use install_name_tool to fix loading libvcmi from Nullkiller AI lib 2021-08-21 09:16:00 +03:00
c2ee9e46af [macOS] use install_name_tool to fix loading libvcmi from the scripting libs 2021-08-21 09:16:00 +03:00
ba7c9d7021 Linux packaging: Add metainfo file 2021-08-02 12:27:56 +01:00
23215e039c client/CVideoHandler.cpp: fix crash on video playback
Avoid buffer overflow caused by sws_scale():
    http://trac.ffmpeg.org/ticket/9254
Currently (ffmpeg-4.4 with SSE3 enabled) sws_scale()
has a few requirements for target data buffers on rescaling:
1. buffer has to be aligned to be usable for SIMD instructions
2. buffer has to be padded to allow small overflow by SIMD instructions
Unfortunately SDL_Surface does not provide these guarantees.
This means that atempt to rescale directly into SDL surface causes
memory corruption. Usually it happens on campaign selection screen
where short video moves start spinning on mouse hover.

To fix [1.] we use av_malloc() for memory allocation.
To fix [2.] we add an `ffmpeg_pad` that provides plenty of space.
We have to use intermdiate buffer and then use memcpy() to land it
to SDL_Surface.

Without the change crash has the following backtrace:

```
(gdb) bt
    (c=0x47508940, src=0x1ffeffef50, srcStride=0x1ffeffef30, srcSliceY=0, srcSliceH=116, dst=0x1ffeffef70, dstStride=0x1ffeffef40) at src/libswscale/x86/yuv2rgb_template.c:119
    (c=<optimized out>, srcSlice=<optimized out>, srcStride=0x432afa20, srcSliceY=<optimized out>, srcSliceH=116, dst=<optimized out>, dstStride=0x1ffefff0a0) at src/libswscale/swscale.c:969
    (this=0x1abaa330, x=90, y=72, dst=0x1a85a4c0, forceRedraw=<optimized out>, update=<optimized out>)
    at ../vcmi-9999/client/CVideoHandler.cpp:332
    at ../vcmi-9999/client/gui/CIntObject.cpp:83
    at ../vcmi-9999/client/gui/CGuiHandler.cpp:462
```

valgrind points to corruption right in sws_scale():

```
Invalid write of size 8
   at 0x6C50BD3: ??? (in /usr/lib64/libswscale.so.5.7.100)
   by 0x6C4FAE6: yuv420_rgb32_ssse3 (yuv2rgb_template.c:119)
   by 0x6C28DF2: sws_scale (swscale.c:969)
   by 0x4566F6: CVideoPlayer::nextFrame() (CVideoHandler.cpp:293)
   by 0x4573A6: CVideoPlayer::update(int, int, SDL_Surface*, bool, bool) (CVideoHandler.cpp:332)
   by 0x25EC94: CIntObject::show(SDL_Surface*) [clone .part.0] (CIntObject.cpp:83)
   by 0x34E855: CMainMenu::update() (CMainMenu.cpp:319)
   by 0x25D589: CGuiHandler::renderFrame() (CGuiHandler.cpp:462)
   by 0x1F7450: mainLoop (CMT.cpp:1387)
   by 0x1F7450: main (CMT.cpp:513)
 Address 0x475088a8 is 0 bytes after a block of size 92,840 alloc'd
   at 0x483F7E5: malloc (vg_replace_malloc.c:380)
   by 0x52B4E23: SDL_malloc_REAL (SDL_malloc.c:5387)
   by 0x5266237: SDL_SIMDAlloc_REAL (SDL_cpuinfo.c:963)
   by 0x52EF042: SDL_CreateRGBSurfaceWithFormat_REAL (SDL_surface.c:123)
   by 0x2649AC: CSDL_Ext::newSurface(int, int, SDL_Surface*) (SDL_Extensions.cpp:42)
   by 0x457B20: CVideoPlayer::open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool) (CVideoHandler.cpp:182)
   by 0x457C60: CVideoPlayer::open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool) (CVideoHandler.cpp:84)
   by 0x35B14E: CCampaignScreen::CCampaignButton::show(SDL_Surface*) (CCampaignScreen.cpp:126)
   by 0x25EC94: CIntObject::show(SDL_Surface*) [clone .part.0] (CIntObject.cpp:83)
   by 0x34E855: CMainMenu::update() (CMainMenu.cpp:319)
   by 0x25D589: CGuiHandler::renderFrame() (CGuiHandler.cpp:462)
   by 0x1F7450: mainLoop (CMT.cpp:1387)
   by 0x1F7450: main (CMT.cpp:513)
```

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2021-07-31 14:35:31 +03:00
b1db6e26d1 Fix: nextPrimarySkill crash in case when probability values are incorrect 2021-07-30 12:10:33 +03:00
25ba3ae33b Replaced Travis CI build badge 2021-07-26 21:02:50 +03:00
b00a1dee28 Fix build 2021-07-26 21:02:50 +03:00
79d06bbaa6 Nullkiller: fix merge conflicts 2021-07-26 21:02:50 +03:00
d47564955e Nullkiller: fix/refactor temporary bonus nodes, fix gather army quest completion 2021-07-26 21:02:50 +03:00
ae67ef027a Nullkiller: fix old VCAI new lines 2021-07-26 21:02:50 +03:00
70ed3f55a5 Nullkiller: replace a hack with temporary bonus node concept 2021-07-26 21:02:50 +03:00
3fa7e0976f Nullkiller: update / fix build, core changes required for Nullkiller AI 2021-07-26 21:02:50 +03:00
b4241670ba Nullkiller: rename VCAI to AIGateway 2021-07-26 21:02:50 +03:00
87a8c776c9 Nullkiller: reduce memory usage for x86 2021-07-26 21:02:50 +03:00
7184364bcb Nullkiller: disable logging and fix tbb build 2021-07-26 21:02:50 +03:00
bc95e4b935 Fix tbb build 2021-07-26 21:02:50 +03:00
1aa81530cb Nullkiller: cancel heavy decomposition on shipyards 2021-07-26 21:02:50 +03:00
9a203b8af9 Nullkiller: parallel object clusterization, stabilization 2021-07-26 21:02:50 +03:00
66843b22d3 Nullkiller: async hero chain calculation 2021-07-26 21:02:50 +03:00
0265de77fa Nullkiller: fix crash, refactor 2021-07-26 21:02:50 +03:00
fb3cda666f Nullkiller: tbb and hero chain calculation optimization and parallel cpathfinder initialization 2021-07-26 21:02:50 +03:00
3480f17a68 Nullkiller: fix defence 2021-07-26 21:02:50 +03:00
0ffc7c3b94 Nullkiller: turn limit for main heroes 2021-07-26 21:02:50 +03:00
1f83569868 Nullkiller: fix defence 2021-07-26 21:02:50 +03:00
b5b9619147 Nullkiller: fix build 2021-07-26 21:02:50 +03:00
4c01a8eec4 Nullkiller: fix a few crashes 2021-07-26 21:02:50 +03:00
3d91f2e988 Fix defence crashes and hangs 2021-07-26 21:02:50 +03:00
3dc76cfe35 Nullkiller: fix crash when buy army through pathfinder 2021-07-26 21:02:50 +03:00
45942cfbbe Nullkiller: stabilization, fix memory leaks 2021-07-26 21:02:50 +03:00
7e88819105 Nullkiller: fix crash and freeze 2021-07-26 21:02:50 +03:00
80df879489 Nullkiller: stabilization 2021-07-26 21:02:50 +03:00
f2c26d7553 Nullkiller: thread interuption point 2021-07-26 21:02:50 +03:00
0d5ae20e64 Nullkiller: improved citadel priority 2021-07-26 21:02:50 +03:00
3822d788e8 Nullkiller: allow buy army through pathfinder 2021-07-26 21:02:50 +03:00
673d908c40 Nullkiller: fix crash because of incorrect memory management 2021-07-26 21:02:50 +03:00
92ac78f87d Nullkiller: fix crash when game ends 2021-07-26 21:02:50 +03:00
f0ceaf5852 Nullkiller: improve perofrmance of AI pathfinding 2021-07-26 21:02:50 +03:00
cf4484e071 Nullkiller: stabilization 2021-07-26 21:02:50 +03:00
e385c83a88 Nullkiller - rewrite decomposition, decomposition cache, morale management 2021-07-26 21:02:50 +03:00
35a1167f3d Nullkiller: refactoring and stabilization of gather army & clusterization 2021-07-26 21:02:50 +03:00
1fdf0de75d Nullkiller: clusterization fixes, heroes clusterization for additional mains in case of locked heroes 2021-07-26 21:02:50 +03:00
645c393e25 Nullkiller: fix freeze on accessing guarded object 2021-07-26 21:02:50 +03:00
5bfe71c8f3 Nullkiller: small optimization of AIPathfinder for big maps 2021-07-26 21:02:50 +03:00
07b6b0605c Nullkiller: blind fix for unit tests to compile 2021-07-26 21:02:50 +03:00