Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update assert message format in Assert_Throw #257

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/Util/util.cpp
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI Review for src/Util/util.cpp:

Code Review: Patch to src/Util/util.cpp

Summary

This patch modifies the Assert_Throw function to improve the format of assertion failure messages. It conditionally shortens the file path displayed in the message if the ZLMediaKit_PREFIX_LENGTH macro is defined. This is a patch review.

Detailed Feedback

Code Overview

The patch modifies the error message generated by Assert_Throw to include the file path relative to a project root directory if ZLMediaKit_PREFIX_LENGTH is defined. This improves the readability and helpfulness of error messages, especially in large projects.

Strengths

  • Improved Error Messages: The change significantly improves the clarity and usefulness of assertion failure messages. The inclusion of the file path and line number makes debugging much easier.
  • Conditional Logic: The use of #ifdef ZLMediaKit_PREFIX_LENGTH makes the code adaptable to different build configurations. This is a good practice for maintaining flexibility.
  • Clear Formatting: The new message format is well-structured and easy to read.

Areas for Improvement

1. Potential Off-by-One Error and String Handling

  • Issue: The line int offset = strlen(file) > ZLMediaKit_PREFIX_LENGTH + 1 ? ZLMediaKit_PREFIX_LENGTH + 1: 0; might lead to an off-by-one error. If strlen(file) is equal to ZLMediaKit_PREFIX_LENGTH + 1, offset will be ZLMediaKit_PREFIX_LENGTH + 1, causing the output to potentially skip the first character after the prefix. Additionally, there's no error handling for potential null pointers in file.

  • Suggestion: Use std::string for safer string manipulation and adjust the offset calculation to avoid the potential off-by-one error. Add a check for a null or empty file pointer.

  • Example:

#if defined(ZLMediaKit_PREFIX_LENGTH)
    std::string filePath(file);
    if (!filePath.empty()) {
        size_t offset = std::min(filePath.size(), (size_t)ZLMediaKit_PREFIX_LENGTH + 1);
        printer << "), at " << filePath.substr(offset) << "#" << line << "@" << func;
    } else {
        printer << "), at <unknown file>#" << line << "@" << func;
    }
#else
    printer << "), at " << file << "#" << line << "@" << func;
#endif

2. Clarity of ZLMediaKit_PREFIX_LENGTH

  • Issue: The meaning and usage of ZLMediaKit_PREFIX_LENGTH are not explicitly explained in the code.

  • Suggestion: Add a comment explaining the purpose of this macro and how it's used to determine the project root directory. Consider adding a more descriptive name, such as ZLMediaKit_PROJECT_ROOT_LENGTH.

  • Example:

// ZLMediaKit_PROJECT_ROOT_LENGTH: The length of the project root directory path.
// This macro is used to shorten the file path displayed in assertion error messages.
// It should be defined to the length of the common prefix of all source files.
#if defined(ZLMediaKit_PROJECT_ROOT_LENGTH)
    // ... (rest of the improved code from suggestion 1)
#else
    // ...
#endif

3. Error Handling for strlen

  • Issue: The code assumes file is always a valid C-style string. If file is a null pointer, strlen(file) will cause a crash.

  • Suggestion: Add a check to handle the case where file is null or empty.

  • Example: (Already partially addressed in suggestion 1)

Conclusion

This patch is a valuable improvement to the project. The enhanced error messages will significantly aid in debugging. Addressing the suggested improvements regarding potential off-by-one errors, string handling, and clarifying the macro's purpose will further enhance the code's robustness and maintainability.

TRANS_BY_GITHUB_AI_ASSISTANT

Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,16 @@ void Assert_Throw(int failed, const char *exp, const char *func, const char *fil
if(str && *str){
printer << ", " << str;
}
printer << "), function " << func << ", file " << file << ", line " << line << ".";
#if defined(ZLMediaKit_PARENT_DIR_LENGTH) && defined(ZLMediaKit_PARENT_DIR)
// Assertion failed: (false), at ZLMediaKit/ext-codec/H264Rtmp.cpp#42@foobar
int offset = strncmp(file, ZLMediaKit_PARENT_DIR, ZLMediaKit_PARENT_DIR_LENGTH) == 0
? ZLMediaKit_PARENT_DIR_LENGTH + 1
: 0;
printer << "), at " << (file + offset) << "#" << line << "@" << func;
#else
printer << "), at " << file << "#" << line << "@" << func;
#endif

throw toolkit::AssertFailedException(printer);
}
}
Expand Down
Loading