From 0fab97a476409dc80fc15219529a860e4eaf2b06 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 6 Nov 2022 08:09:23 +1100 Subject: Fixed a few issues identified by Coverity: * cpu/m6805: Removed unnecessary comparison that can't be true from 'HC05 timer handler. * machine/z80scc.cpp: Fixed flag test in logging. * emu/devdelegate.h: Fixed use-after-move in functoid constructor. * util/unzip.cpp: Fixed integer promotion issue in ZIP16 member header handling. * util/xmlfile.cpp: Got rid of custom allocator functions that have alignment issues and no longer provide value. * capcom/alien.cpp: Use machine().rand() for determinism. * ensoniq/esqpanel.cpp: I/O stream eof() returns whether a read stopped short due to EOF, not whether the file pointer is at EOF. * sega/sms.cpp: Fixed a few use-after-move errors. * osd/modules/monitor: Fixed an apparent bug in what appears to be a setter member function. --- src/devices/cpu/m6805/m68hc05.cpp | 2 +- src/devices/machine/z80scc.cpp | 2 +- src/emu/devdelegate.h | 2 +- src/lib/util/unzip.cpp | 16 ++++++------ src/lib/util/xmlfile.cpp | 44 ++------------------------------ src/mame/capcom/alien.cpp | 2 +- src/mame/ensoniq/esqpanel.cpp | 12 ++++----- src/mame/sega/sms.cpp | 6 ++--- src/osd/modules/monitor/monitor_module.h | 2 +- 9 files changed, 24 insertions(+), 64 deletions(-) diff --git a/src/devices/cpu/m6805/m68hc05.cpp b/src/devices/cpu/m6805/m68hc05.cpp index df7c590d3a3..a4d1864f372 100644 --- a/src/devices/cpu/m6805/m68hc05.cpp +++ b/src/devices/cpu/m6805/m68hc05.cpp @@ -646,7 +646,7 @@ void m68hc05_device::burn_cycles(unsigned count) unsigned const ps_mask((1 << ps_opt) - 1); unsigned const increments((count + (m_prescaler & ps_mask)) >> ps_opt); u32 const new_counter(u32(m_counter) + increments); - bool const timer_rollover((0x010000 > m_counter) && (0x010000 <= new_counter)); + bool const timer_rollover(0x010000 <= new_counter); bool const output_compare_match((m_ocr > m_counter) && (m_ocr <= new_counter)); m_prescaler = (count + m_prescaler) & ps_mask; m_counter = u16(new_counter); diff --git a/src/devices/machine/z80scc.cpp b/src/devices/machine/z80scc.cpp index 020b2678bfd..48415c9a683 100644 --- a/src/devices/machine/z80scc.cpp +++ b/src/devices/machine/z80scc.cpp @@ -1918,7 +1918,7 @@ void z80scc_channel::do_sccreg_wr1(uint8_t data) LOG("- Receiver Interrupt on Special Conditions only\n"); break; } - if ((data & WR1_RX_INT_MODE_MASK) == WR1_PARITY_IS_SPEC_COND) + if (data & WR1_PARITY_IS_SPEC_COND) LOG("- Parity error is a Special Condition\n"); m_uart->check_interrupts(); } diff --git a/src/emu/devdelegate.h b/src/emu/devdelegate.h index 5f7af89383b..a2465985c13 100644 --- a/src/emu/devdelegate.h +++ b/src/emu/devdelegate.h @@ -211,7 +211,7 @@ public: device_delegate(device_t &owner, T &&funcptr, std::enable_if_t::value, char const *> name) : basetype(std::forward(funcptr), name) , detail::device_delegate_helper(owner) - { basetype::operator=(basetype(std::forward(funcptr), name)); } + { } // setters that implicitly bind to the current device template void set(ReturnType (D::*funcptr)(Params...), char const *name) diff --git a/src/lib/util/unzip.cpp b/src/lib/util/unzip.cpp index 1e18b4c2b7c..348d544bf10 100644 --- a/src/lib/util/unzip.cpp +++ b/src/lib/util/unzip.cpp @@ -593,17 +593,17 @@ public: , m_compressed_size(header.compressed_size()) , m_header_offset(header.header_offset()) , m_start_disk(header.start_disk()) - , m_offs_compressed_size(~m_uncompressed_size ? 0 : 8) - , m_offs_header_offset(m_offs_compressed_size + (~m_compressed_size ? 0 : 8)) - , m_offs_start_disk(m_offs_header_offset + (~m_header_offset ? 0 : 8)) - , m_offs_end(m_offs_start_disk + (~m_start_disk ? 0 : 4)) + , m_offs_compressed_size((0xffff'ffffU != m_uncompressed_size) ? 0 : 8) + , m_offs_header_offset(m_offs_compressed_size + ((0xffff'ffffU != m_compressed_size) ? 0 : 8)) + , m_offs_start_disk(m_offs_header_offset + ((0xffff'ffffU != m_header_offset) ? 0 : 8)) + , m_offs_end(m_offs_start_disk + ((0xffffU != m_start_disk) ? 0 : 4)) { } - std::uint64_t uncompressed_size() const noexcept { return ~m_uncompressed_size ? m_uncompressed_size : read_qword(0x00); } - std::uint64_t compressed_size() const noexcept { return ~m_compressed_size ? m_compressed_size : read_qword(m_offs_compressed_size); } - std::uint64_t header_offset() const noexcept { return ~m_header_offset ? m_header_offset : read_qword(m_offs_header_offset); } - std::uint32_t start_disk() const noexcept { return ~m_start_disk ? m_start_disk : read_dword(m_offs_start_disk); } + std::uint64_t uncompressed_size() const noexcept { return (0xffff'ffffU != m_uncompressed_size) ? m_uncompressed_size : read_qword(0x00); } + std::uint64_t compressed_size() const noexcept { return (0xffff'ffffU != m_compressed_size) ? m_compressed_size : read_qword(m_offs_compressed_size); } + std::uint64_t header_offset() const noexcept { return (0xffff'ffffU != m_header_offset) ? m_header_offset : read_qword(m_offs_header_offset); } + std::uint32_t start_disk() const noexcept { return (0xffffU != m_start_disk) ? m_start_disk : read_dword(m_offs_start_disk); } std::size_t total_length() const noexcept { return minimum_length() + m_offs_end; } static constexpr std::size_t minimum_length() { return 0x00; } diff --git a/src/lib/util/xmlfile.cpp b/src/lib/util/xmlfile.cpp index b290f6e5381..e1bd1941734 100644 --- a/src/lib/util/xmlfile.cpp +++ b/src/lib/util/xmlfile.cpp @@ -807,49 +807,12 @@ const char *normalize_string(const char *string) // EXPAT INTERFACES //************************************************************************** -//------------------------------------------------- -// expat_malloc/expat_realloc/expat_free - -// wrappers for memory allocation functions so -// that they pass through out memory tracking -// systems -//------------------------------------------------- - -static void *expat_malloc(size_t size) -{ - auto *result = (uint32_t *)malloc(size + 4 * sizeof(uint32_t)); - *result = size; - return &result[4]; -} - -static void expat_free(void *ptr) -{ - if (ptr != nullptr) - free(&((uint32_t *)ptr)[-4]); -} - -static void *expat_realloc(void *ptr, size_t size) -{ - void *newptr = expat_malloc(size); - if (newptr == nullptr) - return nullptr; - if (ptr != nullptr) - { - uint32_t oldsize = ((uint32_t *)ptr)[-4]; - memcpy(newptr, ptr, oldsize); - expat_free(ptr); - } - return newptr; -} - - //------------------------------------------------- // expat_setup_parser - set up expat for parsing //------------------------------------------------- static bool expat_setup_parser(parse_info &info, parse_options const *opts) { - XML_Memory_Handling_Suite memcallbacks; - // setup info structure memset(&info, 0, sizeof(info)); if (opts != nullptr) @@ -870,11 +833,8 @@ static bool expat_setup_parser(parse_info &info, parse_options const *opts) info.curnode = info.rootnode.get(); // create the XML parser - memcallbacks.malloc_fcn = expat_malloc; - memcallbacks.realloc_fcn = expat_realloc; - memcallbacks.free_fcn = expat_free; - info.parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); - if (info.parser == nullptr) + info.parser = XML_ParserCreate(nullptr); + if (!info.parser) { info.rootnode.reset(); return false; diff --git a/src/mame/capcom/alien.cpp b/src/mame/capcom/alien.cpp index d7fe746d0f1..de96368549f 100644 --- a/src/mame/capcom/alien.cpp +++ b/src/mame/capcom/alien.cpp @@ -111,7 +111,7 @@ u32 alien_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, cons u8 alien_state::fpga_r() { u8 fpga_type = 1; // 2 bit value - return (fpga_type << 5) | 0x10 | (rand() & 7); // status bits TODO + return (fpga_type << 5) | 0x10 | (machine().rand() & 7); // status bits TODO } void alien_state::alien_map(address_map &map) diff --git a/src/mame/ensoniq/esqpanel.cpp b/src/mame/ensoniq/esqpanel.cpp index ba33ee64e2f..7576a9518a2 100644 --- a/src/mame/ensoniq/esqpanel.cpp +++ b/src/mame/ensoniq/esqpanel.cpp @@ -71,13 +71,13 @@ namespace esqpanel { return 0; } - int n; - while (!is.eof()) { - char c = is.get(); - int message_type = external_panel::get_message_type(c); + int c; + while ((c = is.get()) != EOF) + { + int message_type = external_panel::get_message_type(char(uint8_t(unsigned(c)))); + int n; is >> n; - int send = (n != 0); - if (send) + if (n != 0) { m_send_message_types |= message_type; } diff --git a/src/mame/sega/sms.cpp b/src/mame/sega/sms.cpp index c471fffc943..29a65c3c4b2 100644 --- a/src/mame/sega/sms.cpp +++ b/src/mame/sega/sms.cpp @@ -540,7 +540,7 @@ void sms_state::sms_ntsc_base(machine_config &config) template void sms_state::screen_sms_pal_raw_params(screen_device &screen, X &&pixelclock) { - screen.set_raw(std::forward(pixelclock), + screen.set_raw(pixelclock, sega315_5124_device::WIDTH, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH - 2, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256 + 10, @@ -553,7 +553,7 @@ void sms_state::screen_sms_pal_raw_params(screen_device &screen, X &&pixelclock) template void sms_state::screen_sms_ntsc_raw_params(screen_device &screen, X &&pixelclock) { - screen.set_raw(std::forward(pixelclock), + screen.set_raw(pixelclock, sega315_5124_device::WIDTH, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH - 2, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256 + 10, @@ -566,7 +566,7 @@ void sms_state::screen_sms_ntsc_raw_params(screen_device &screen, X &&pixelclock template void gamegear_state::screen_gg_raw_params(screen_device &screen, X &&pixelclock) { - screen.set_raw(std::forward(pixelclock), + screen.set_raw(pixelclock, sega315_5124_device::WIDTH, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 6*8, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 26*8, diff --git a/src/osd/modules/monitor/monitor_module.h b/src/osd/modules/monitor/monitor_module.h index 3244e7fd42b..583f47d4b34 100644 --- a/src/osd/modules/monitor/monitor_module.h +++ b/src/osd/modules/monitor/monitor_module.h @@ -53,7 +53,7 @@ public: float aspect() const { return m_aspect; } float pixel_aspect() const { return m_aspect / (float(m_pos_size.width()) / float(m_pos_size.height())); } - void update_resolution(const int new_width, const int new_height) const { m_pos_size.resize(new_width, new_height); } + void update_resolution(const int new_width, const int new_height) { m_pos_size = m_pos_size.resize(new_width, new_height); } void set_aspect(const float a) { m_aspect = a; } bool is_primary() const { return m_is_primary; } -- cgit v1.2.3