mirror of
https://github.com/capstone-engine/capstone.git
synced 2024-11-26 23:10:32 +00:00
3a2cd3c331
* Fix CID 508418 - Uninitialized struct * Fix CID 509089 - Fix OOB read and write * Fix CID 509088 - OOB. Also adds tests and to ensure no OOB access. * Fix CID 509085 - Resource leak. * Fix CID 508414 and companions - Using undefined values. * Fix CID 508405 - Use of uninitialized value * Remove unnecessary and badly implemented dev fuzz code. * Fix CID 508396 - Uninitialzied variable. * Fix CID 508393, 508365 -- OOB read. * Fix CID 432207 - OVerlapping memory access. * Remove unused functions * Fix CID 432170 - Overlapping memory access. * Fix CID 166022 - Check for negative index * Let strncat not depend n src operand. * Fix 509083 and 509084 - NULL dereference * Remove duplicated code. * Initialize sysop * Fix resource leak * Remove unreachable code. * Remove duplicate code. * Add assert to check return value of cmoack * Fixed: d should be a signed value, since it is checked against < 0 * Add missing break. * Add NULL check * Fix signs of binary search comparisons. * Add explicit cast of or result * Fix correct scope of case. * Handle invalid integer type. * Return UINT_MAX instead of implicitly casted -1 * Remove dead code * Fix type of im * Fix type of d * Remove duplicated code. * Add returns after CS_ASSERTS * Check for len == 0 case. * Ensure shift operates on uint64 * Replace strcpy with strncpy. * Handle edge cases for 32bit rotate * Fix some out of enum warnings * Replace a strcpy with strncpy. * Fix increment of address * Skip some linting * Fix: set instruction id * Remove unused enum * Replace the last usages of strcpy with SStream functions. * Increase number of allowed AArch64 operands. * Check safety of incrementing t the next operand. * Fix naming of operand * Update python constants * Fix option setup of CS_OPT_DETAIL_REAL * Document DETAIL_REAL has to be used with CS_OPT_ON. * Run Coverity scan every Monday. * Remove dead code * Fix OOB read * Rename macro to reflect it is only used with sstreams * Fix rebase issues
94 lines
2.2 KiB
C
94 lines
2.2 KiB
C
/* Capstone Disassembly Engine */
|
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */
|
|
|
|
#ifndef CS_SSTREAM_H_
|
|
#define CS_SSTREAM_H_
|
|
|
|
#include "include/capstone/platform.h"
|
|
#include <stdio.h>
|
|
|
|
typedef enum {
|
|
Markup_Immediate,
|
|
Markup_Register,
|
|
Markup_Target,
|
|
Markup_Memory,
|
|
} SStreamMarkup;
|
|
|
|
#define SSTREAM_BUF_LEN 512
|
|
|
|
typedef struct SStream {
|
|
char buffer[SSTREAM_BUF_LEN];
|
|
int index;
|
|
bool is_closed;
|
|
bool markup_stream; ///< If true, markups to the stream are allowed.
|
|
bool prefixed_by_markup; ///< Set after the stream wrote a markup for an operand.
|
|
} SStream;
|
|
|
|
#define SSTREAM_OVERFLOW_CHECK(OS, len) \
|
|
do { \
|
|
if (OS->index + len + 1 > SSTREAM_BUF_LEN) { \
|
|
fprintf(stderr, "Buffer overflow caught!\n"); \
|
|
return; \
|
|
} \
|
|
} while(0)
|
|
|
|
#define SSTREAM_RETURN_IF_CLOSED(OS) \
|
|
do { \
|
|
if (OS->is_closed) \
|
|
return; \
|
|
} while(0)
|
|
|
|
void SStream_Init(SStream *ss);
|
|
|
|
const char *SStream_replc(const SStream *ss, char elem, char repl);
|
|
|
|
void SStream_replc_str(SStream *ss, char chr, const char *rstr);
|
|
|
|
const char *SStream_rbuf(const SStream *ss);
|
|
|
|
void SStream_extract_mnem_opstr(const SStream *ss, char *mnem_buf, size_t mnem_buf_size, char *op_str_buf, size_t op_str_buf_size);
|
|
|
|
void SStream_trimls(SStream *ss);
|
|
|
|
void SStream_Flush(SStream *ss, FILE *file);
|
|
|
|
void SStream_Open(SStream *ss);
|
|
|
|
void SStream_Close(SStream *ss);
|
|
|
|
void SStream_concat(SStream *ss, const char *fmt, ...);
|
|
|
|
void SStream_concat0(SStream *ss, const char *s);
|
|
|
|
void SStream_concat1(SStream *ss, const char c);
|
|
|
|
void printInt64Bang(SStream *O, int64_t val);
|
|
|
|
void printUInt64Bang(SStream *O, uint64_t val);
|
|
|
|
void printInt64(SStream *O, int64_t val);
|
|
void printUInt64(SStream *O, uint64_t val);
|
|
|
|
void printInt32Bang(SStream *O, int32_t val);
|
|
|
|
void printInt8(SStream *O, int8_t val);
|
|
void printInt16(SStream *O, int16_t val);
|
|
void printInt32(SStream *O, int32_t val);
|
|
|
|
void printUInt32Bang(SStream *O, uint32_t val);
|
|
|
|
void printUInt32(SStream *O, uint32_t val);
|
|
|
|
// print number in decimal mode
|
|
void printInt32BangDec(SStream *O, int32_t val);
|
|
|
|
void printFloat(SStream *O, float val);
|
|
|
|
void printFloatBang(SStream *O, float val);
|
|
|
|
void printExpr(SStream *O, uint64_t val);
|
|
|
|
SStream *markup_OS(SStream *OS, SStreamMarkup style);
|
|
|
|
#endif
|